程序代码如下: 
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.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【liny8351】截止到2008-07-16 12:46:40的历史汇总数据(不包括此帖):
    发帖的总数量:1                        发帖的总分数:0                        每贴平均分数:0                        
    回帖的总数量:0                        得分贴总数量:0                        回帖的得分率:0%                       
    结贴的总数量:0                        结贴的总分数:0                        
    无满意结贴数:0                        无满意结贴分:0                        
    未结的帖子数:1                        未结的总分数:0                        
    结贴的百分比:0.00  %               结分的百分比:---------------------
    无满意结贴率:---------------------无满意结分率:---------------------
    如何结贴请参考这里:http://topic.csdn.net/u/20080501/09/ef7ba1b3-6466-49f6-9d92-36fe6d471dd1.html
      

  2.   

    父类初始化-->子类初始化;成员变量初始化-->构造器初始化;
      

  3.   

    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(); 

    } 首先:new BigEgg2()需要调用父类的构造方法,即public Egg2();
    需要调用父类的构造方法首先初始化其父类的成员变量,Yolk y=new Yolk(),所以第1行打印出Egg2.Yolk()
    再执行public Egg2();打印出New Egg2.
    其次:new BigEgg2() NEW出对象需要对成员变量初始化,即调用BigEgg2.Yolk(),NEW 一个YOLK又需要调用父类的Yolk(),所以打印Egg2.Yolk()
    接着打印BigEgg2.Yolk() 最后一个自己想吧!
    记得以后给点分啊,打这么多字很累的