package alfred;
public class Base {
private String baseName = "base";
public Base() {
callName();
}
public void callName() {
System.out.println(baseName);
}
static class Sub extends Base {
private String baseName = "sub";
public Sub() {
// super();//只是执行到这一步,没有初始化子类成员变量,输出null
// System.out.println(this.baseName);//初始化子类成员变量,输出sub
// callName();
}
public void callName() {
System.out.println(baseName);
}
}
public static void main(String[] args) {
Base b = new Sub();
}
}
实际上在new Sub()时,实际执行过程为:
public Sub(){
super();
baseName = "sub";
}
可见,在baseName = "sub"执行前,子类的callName()已经执行,所以子类的baseName为默认值状态null;