关于含有构建器调用顺序的一个问题,请指点一下小弟(有点长)
class Egg2{
protected class Yolk{
public Yolk(){
System.out.println("Egg2.Yolk()");
}
public void f(){
System.out.println("Egg2.Yolk.f()");
}
}
private Yolk y=new Yolk();
public Eggg2(){
System.out.println("new Egg2()");
}
public void insertYolk(Yolk yy){y=yy;}
public void g(){y.f();}
}
public class BigEgg2 extends Egg2{
public class Yolk extends Egg2.Yolk{
public Yolk(){
System.out.println("BigEgg2.Yolk()");
}
}
public BigEgg2(){insertYolk(new Yolk());}//23,去掉这一行
public static void main(String[] args){
Egg2 e2=new BigEgg2();
e2.g();
}
}
输出结果为:Egg2.Yolk()
new Egg2()
Egg2.Yolk()
BigEgg2.Yolk()
BigEgg2.Yolk.f()
所以我自己总结的构建器调用顺序为:1、基类内部类的构建器的调用。2、基类构建器的调用。3、基类成员初始化。4、衍生类内部类的构建器的调用。5、衍生类构建器的调用。
问题在这里:当我把//23行变为注释,也就是让BigEgg2采用默认构建器的时候,输出结果为:Egg2.Yolk()
new Egg2()
Egg2.Yolk.f()
我的问题是:如果采用衍生类的默认构建器,是不是就意味着构建器调用顺序中从第3步开始就不再往下面继续了么?
ps:这个程序本身没有任何意义,小弟只是刚学java,想弄清楚一些基本的语法。