父类构造函数调用子类的覆写方法,构造函数的表现是不可预计的,往往会由于子类的初始化未完成而导致异常
示例1:
public class ParentClass {
public ParentClass() {
System.out.println(toString());
}
@Override
public String toString() {
return "i am daddy";
}
}
public class ChildClass extends ParentClass {
private String name = "i am child";
private static int age = 18;
public ChildClass() {
super();
}
@Override
public String toString() {
return age + name;
}
}
public class Rule2Solution {
public static void main(String[] args) {
// 初始化子类时,首先先会初始化父类【初始化父类的静态变量+静态方法,再初始化子类的静态变量+静态方法】
// 初始化子类的非静态方法,初始化父类的构造函数【如果父类构造函数调用的方法被子类重写,调用的将会是子类的方法】
// 父类调用子类方法时,子类的实例变量还没有赋值,所以是null【静态变量已经赋值,所以为18】
new ChildClass();
}
}