访问子类对象的实例变量

class Base{
private int i = 2;
public Base(){
System.out.println(this.getClass());
this.display();
}
public void display(){
System.out.println("Base中的方法"+i);
}
}

class Derived extends Base{
private int i = 22;
public Derived(){
i = 222;
}
public void display(){
System.out.println("Derived中的方法"+i);
}
}
public class Test {

public static void main(String[] args){
new Derived(); }
}
/**************/
输出结果:
class crazy.chapter2.object.Derived
Derived中的方法0

构造器只是负责对java对象实例变量执行初始化(赋值),在执行构造器之前,该对象所占的内存已经被分配下来,这些内存里值都是空值——对于基本类型的变量,默认值都是0或false;对于引用类型的变量,默认值都是null。当程序调用粗体部分时,系统会先为Derived对象分配2块内存空间,分别用来存放Derived对象的两个i实例变量,一个属于Base,另一个属于Derived,此时这两个实例变量都为0。接下来,在执行Derived类构造器之前,首先会执行Base类的构造器。由于Base构造器是在Derived中执行的,所以Base构造器中的this指的是Derived类。this.display()就是调用Derived类中的display方法

你可能感兴趣的:(实例变量)