public class Base {
private String baseName= "base";
public Base(){
callName();
}
public void callName(){
System.out.println("base" +baseName);
}
static class Sub extends Base{
private String baseName = "sub";
public void callName(){
System .out.println( "sub:"+baseName);
}
}
public static void main(String[] args){
Base b = new Sub();
b.callName();
}
}
创建子类的时候要调用父类构造方法,父类构造方法中的callName方法发生了多态,调的是子类的方法和属性,而执行构造方法的时候,子类的成员属性baseName还没赋值,所以是null,打印出来就是null
构造完了,初始化完了,你再调用他的callName,baseName值就是sub