class Egg2{
protected class Yolk{
public Yolk(){
System.out.println("父类内部类构造函数被调用");
}
public void f(){
System.out.println("父类内部类的f()");
}
}
private Yolk y = new Yolk();
public Egg2(){
System.out.println("父类构造函数被调用");
}
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("子类内部类构造函数被调用");
}
public void f(){
System.out.println("子类内部类的f()");
}
}
public BigEgg2(){
insertYolk(new Yolk());
}
public static void main(String [] args){
Egg2 e2 = new BigEgg2();
e2.g();
}
}
/*
父类内部类构造函数被调用
父类构造函数被调用
父类内部类构造函数被调用
子类内部类构造函数被调用
子类内部类的f()
*/
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
这是《Think In Java》中的例子,用来说明在子类的内部类继承父类的内部类的例子,但是在其实际运行结果上我却看不明白,总觉得被最先调用的应该是父类的构造函数(public Egg2())才对,为何这里第一个调用的却是父类的内部类的构造函数???