Java内部类继承问题

来源:百度知道 编辑:UC知道 时间:2024/05/25 06:44:30
程序代码如下:
class Egg2{
protected class Yolk{
public Yolk(){System.out.println("Egg2.Yolk()");}
public void f(){System.out.println("Egg.Yolk.f()");}
}
private Yolk y=new Yolk();
public Egg2(){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 void f(){System.out.println("BigEgg2.Yolk.f()");}
}
public BigEgg2(){insertYolk(new Yolk());}
public static void main(String[] args){
Egg2 e2=new BigEgg2();
e2.g();
}
}
输出结果如下:
Egg2.Yolk()
New Egg2
Egg2.Yolk()
BigEgg2.Yolk()
BigEgg2.Yolk.f()

疑问:
在main()函数中首先执行new BigEgg2()语句,那么应该首先调用类BigEgg2基类Egg2的构造函数Egg2()从而首先打印出“New Egg2”,但是实际执行情况却是首先打印出“Egg2.Yolk()”,两次打印出的“Egg2.Yolk()”分

你自己看一下吗!我还真没这么写过,也没见别人这么写过一下子我也会所不好!呵呵。。。。

执行顺序如下
1.Egg2 e2=new BigEgg2();

2.父类中的构造方法

2.1 public Yolk(){
System.out.println("Egg2.Yolk()");
}
2.2 public Egg2(){
System.out.println("New Egg2");
}
3.insertYolk(new Yolk());

4.public Yolk(){
System.out.println("Egg2.Yolk()");
}

5.public Yolk(){
System.out.println("BigEgg2.Yolk()");
}

6. public void g(){
y.f();
}

7. public void f(){
System.out.println("BigEgg2.Yolk.f()");
}

我头一次见到这个题,挺有意思的!

这个是Java编程思想上面的