class Egg2
{
class Yolk
{
public Yolk()
{
System.out.println("Yolk InnerClass : Yolk()");
}
public void f()
{
System.out.println("Yolk InnerClass Method : f()");
}
}
private Yolk y=new Yolk();
public Egg2()
{
System.out.println("Egg2 OuterClass : Egg2()");
}
public void insertYolk(Yolk y)
{
this.y=y;
}
public void g()
{
y.f();
}
}class BigEgg2 extends Egg2
{
class Yolk extends Egg2.Yolk
{
public Yolk()
{
System.out.println("BigEgg2.Yolk()");
}
public void f()
{
System.out.println("BigEgg2.Yolk.f()");
}
}
public BigEgg2()
{
insertYolk(new Yolk());
}
}class Test
{
public static void main(String[] args)
{
Egg2 e2=new BigEgg2();
e2.g();
}
}
上面代码的结果,我不理解,对它执行顺序也很糊涂。BigEgg2类是Egg2类的子类,new BigEgg2()时,应该先执行父类Egg2的构造方法,接着执行子类BigEgg2的构造方法。可是首先执行的是Egg2类的内部类Yolk的构造方法,我很糊涂,请大家帮忙解答一下!
这里要注意一点,初始化块是在构造函数前执行的
private Yolk y=new Yolk();相当于
private Yolk y;
{y=new Yolk();} //{}这样的处理叫做初始化块比如
class A {
{System.out.println("first");} public A() {
System.out.println("second");
} public static void main(String[] args) {
A a = new A();
}
}
Yolk InnerClass : Yolk()
Egg2 OuterClass : Egg2()
Yolk InnerClass : Yolk()
BigEgg2.Yolk()
BigEgg2.Yolk.f()是什么原因,它执行了两次呢?
insertYolk(new Yolk())将Yolk对象传给了Egg2类中的insertYolk方法的形参,形参又赋给了Yolk y,这是不是表示,在这时候y指向了BigEgg2的内部类啊?