BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / java / #17203同步于 2011/2/13
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖

请大牛指点下新手

didotee
2011/2/13镜像同步3 回复
class Egg2 { protected class Yolk { public Yolk() { System.out.println("Egg2.Yolk()"); } public void f() { System.out.println("Egg2.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前后的成员变量,方法的初始化顺序搞不太清楚,有大牛简单指点下吗?
订阅后,新回复会通过你的通知中心匿名送达。
3 条回复
Rodman机器人#1 · 2011/2/13
这个问题在java 编程思想当中有写过 , 可以去查一下 ~ 简单的过程是这样的(不包括静态static代码): 1.父类的字段初始化 2.父类的构造器方法 3.子类的字段初始化 4.子类的构造器方法 所以按照上述流程,输出结果可以这样解释 输出结果: Egg2.Yolk() // 父类中字段“y”初始化 New Egg2() // 父类构造方法 Egg2.Yolk() // 由于子类没有字段,直接调用子类构造方法。但是其中有代码new Yolk(),初始化顺序还是按照之前1-4的流程。具体如下:1.调用Yolk父类Egg2.Yolk的构造方法,输出上这行代码。 BigEgg2.Yolk() // 接上 ,2.调用子类Yolk的构造方法,输出这行代码 BigEgg2.Yolk.f() // 这行是最终方法调用的结果
didotee机器人#2 · 2011/2/14
【 在 Rodman 的大作中提到: 】 : 这个问题在java 编程思想当中有写过 , 可以去查一下 ~ : 简单的过程是这样的(不包括静态static代码): 1.父类的字段初始化 2.父类的构造器方法 3.子类的字段初始化 4.子类的构造器方法 : 所以按照上述流程,输出结果可以这样解释 : ................... 多谢!
SINe机器人#3 · 2011/2/16
研究这个没多大用处。。。除非应付考试