class A {
private int i=f();
public A(){
System.out.println("A的构造方法,i:"+i);
}
public int f(){
System.out.println("A的方法f(),i:"+i);
return 1;
}
}
class B extends A{
private int j=f1();
public B(){
System.out.println("B的构造方法,j:"+j);
}
public int f1(){
System.out.println("B的方法f1(),j:"+j);
return 2;
}
}
class C extends B {
boolean f;
int k=f2();
public C(){
this(3.4);
System.out.println("C的构造方法,k:"+k);
}
public C(double d){
System.out.println("C(double d)的构造方法");
}
public int f2(){
System.out.println("C的方法f2(),f:"+f);
return 3;
}
}
public class SubClassInstanceDemo {
public static void main(String[] args) {
C c=new C();
System.out.println(c.k);
}
}
在创建C的实例化对象时,进行C的成员变量的默认初始化:f=false,k=0
然后绑定构造方法参数,进入super()到B中
进行B中的成员变量默认初始化:j=0
然后绑定构造方法参数,进入super()到A中
进行A中的成员变量默认初始化:i=0,
然后绑定构造方法参数,进入super()到Object中,
在Object中进行一系列的操作后,回溯到A中,
进行A的显示初始化,调用了f(), 打印 "A的方法f(),i:0",并为i显示赋值1,
进入到A的构造方法中:打印"A的构造方法,i:1"
然后回溯到B中,进行显示初始化:调用f1(),打印"B的方法f1(),j:0" ,并为j赋值2
进入到B的构造方法:打印"B的构造方法,j:2"
然后回溯到C中,进行显示初始化:调用f2(),打印"C的方法f2(),f:false",并为k完成赋值3
进入C的含参数构造方法,打印:"C(double d)的构造方法"
在进入C的无参数构造方法,打印:"C的构造方法,k:3"
这样实例化对象的过程完成
然后:打印c.k得到3