程序代码如下:
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()”分别是程序执行那条语句打印出来的,请告知,小弟初学者!万分感谢!
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()”分别是程序执行那条语句打印出来的,请告知,小弟初学者!万分感谢!
楼主【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
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() 最后一个自己想吧!
记得以后给点分啊,打这么多字很累的