下面有一个例子说明Java中子类的实例化过程:
public class Fu {
Fu(){
super();
show();
return;
}
void show(){
System.out.println("fu show");
}
}
class Zi extends Fu{
int num = 8;
Zi(){
super();
return;
}
void show(){
System.out.println("zi show "+"...."+num);
}
}
class ExtendsDemo{
public static void main(String [] args){
Zi z = new Zi();
z.show();
}
}
Output:
zi show ....0
zi show ....8
过程分析:
首先加载ExtendsDemo类,main方法进栈,然后在栈里面开辟一临时空间存放引用变量z,然后堆内存开辟一空间存放新创建的zi类对象,子类对象有一成员变量num,num默认初始化为0,随后进入zi类的构造器,第一行调用父类的构造函数进行初始化(在进行参数传递时,会传递一个隐形参数就是this,谁调用该this就代表谁,因此父类构造器中的show()方法的结果是zi show ...0),父类初始化完毕后,再进行子类的显示初始化,此时num = 8;然后执行子类的构造函数进行特定初始化,初始化完成后将对象的地址值赋给引用型变量。