最近在开发过程中遇见一个问题,子类定义成员变量,然后在父类的构造方法中初始化。结果后面一直报这个成员变量为null。按照思维惯性,是不应该为null的。
于是,我写了一个小测试,发现确实如此。
public class Main {
public static void main(String[] args) {
Child child = new Child();
child.print();
child.init1();
child.print();
}
}
class Child extends Father{
private String name = null;
@Override
void init() {
name = "child";
}
@Override
void init1() {
name = "child1";
}
void print(){
System.out.println("我的名字:" + name);
}
}
class Father{
public Father(){
init();
}
void init(){}
void init1(){}
}
打印结果如下:
我的名字:null
我的名字:child1
所以,子类的成员变量是不可以在父类的构造方法中初始化的。原因应该和java的类加载机制有关,后面我去查看资料,再来做解释。