class Base{
int i = 2;
public int getI(){
return i;
}
public Base(){
System.out.println(this.i);
this.display();
this.say();
}
public void display(){
System.out.println(this.i);
}
public void say(){
System.out.println("bbb");
}
}
class Parent extends Base{
int i = 100;
public Parent(){
System.out.println("parentConstructor" + i);
}
public void display(){
System.out.println(this.i);
}
public void say(){
System.out.println("aaa");
}
}
public class TestParent {
public static void main(String args[]){
new Parent();
}
}
当this在构造器中时,this代表正在初始化的java对象。此时通过parent的构造方法隐式调用父类Base的构造方法时,编译时类型为Base而运行时类型为Parent。当变量的编译时类型和运行时类型不同时,通过该变量访问它引用的的对象的实例变量时,该实例变量的值由声明该变量的类型决定(即Base)。但通过该变量调用它引用的对象的实例方法时,该方法行为将由它实际所引用的对象来决定。