Java 子类初始化父类的构造方法 成员变量不支持多态

Posted 鱼笑笑

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 子类初始化父类的构造方法 成员变量不支持多态相关的知识,希望对你有一定的参考价值。

class Fu{
int a=2;
Fu() {
System.out.println("fu run");
}
}
class Zi extends Fu{
Zi() {
System.out.println("zi run");
}
}

public class Copy {
public static void main(String[] args) {

Zi zi = new Zi();
System.out.println(zi.a);
}

}

运行结果为 fu run ,zi run ,0 说明子类在实例化的时候,调取了父类的构造函数中的方法,但并没有调用成员变量。,

====== 子类 实例化的时候 默认调用父类为空的构造方法 即super();
               可以不写 但是当父类没有为空的构造方法的时候,就必须在子类中调用那个不为空的构造方法先实例父类 才能实例子类。为空的构造方法 默认存在 在子类中默认自动调用。

========父类引用指向子类对象的时候  根据引用变量中 实例所属的类调用不同的类的方法,这种多态只适用于方法不适用与成员变量。

简单的理解为Java不支持属性字段覆盖(override),只支持方法覆盖 。

======实例化子类的时候,初始化了父类的构造函数,但未产生对象,因为父类有可能是接口,若父类有为空的构造方法则默认调用。因为子类必须持有父类的成员变量值,所以要初始化一下,且对于成员变量不能重写,重写也无多态效果。
           Ctrl n new class的时候  记得勾选 Constructors from  superclass  最好默认都选上省事 这样就会默认都加上为空的构造方法。
           没有为空的构造方无法隐身初始化bean 反射需要为空的构造方法。
 
 

 




















以上是关于Java 子类初始化父类的构造方法 成员变量不支持多态的主要内容,如果未能解决你的问题,请参考以下文章

动手动脑,11.9

java中成员变量代码块构造函数运行顺序

java 既然子类能继承父类的所有属性与方法,那子类不能不定义成员变量?

java基础知识十一

课程作业09:继承与多态课件中动手动脑的相关问题。

java中,子类能调用父类中所有方法、对象吗?是不是父类也能调用子类所有……?