关于Thinking in java,有个问题问大家!

Gray_Sky 2011-02-21 11:04:58
代码:
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 e = new BigEgg2();
e.g();
}
}

打印结果:
Egg2.Yolk()
new Egg2()
Egg2.Yolk()
BigEgg2.Yolk()
BigEgg2.Yolk.f()

问题:第一次的Egg2.Yolk()是怎么打出来的?
...全文
131 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Gray_Sky 2011-02-21
  • 打赏
  • 举报
回复
谢谢大家,结贴拿分吧
_黑白_ 2011-02-21
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 whmjxa 的回复:]

java类的初始化顺序是这样的,如果有父类的话,先初始化父类的,再初始化子类
在同一个类里面,先初始化各种成员变量,再调用构造方法
在上面的例子中,因为先初始化父类中的y变量,而y = new Yolk();
所以先输出Egg2.Yolk()
[/Quote]
顶....
silenceburn 2011-02-21
  • 打赏
  • 举报
回复
我乱入一句发发和LZ同样的牢骚,
当时我看这段的输出第一行,也被蒙住了。

主要因为这段是讲内部类的继承问题的,
private Yolk y = new Yolk(); 改成 private Yolk y;
对这段程序的演示功能、以及上下文的相关阐述,没有任何影响。
很容易漏看掉这个父类里的直接new赋值。

但是Bruce Eckel在这里偏偏加了个new Yolk();
不知道是不是带领大家复习初始化顺序。。。。。囧。。。郁闷。。。

whmjxa 2011-02-21
  • 打赏
  • 举报
回复
java类的初始化顺序是这样的,如果有父类的话,先初始化父类的,再初始化子类
在同一个类里面,先初始化各种成员变量,再调用构造方法
在上面的例子中,因为先初始化父类中的y变量,而y = new Yolk();
所以先输出Egg2.Yolk()
eetine 2011-02-21
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 kyox0 的回复:]
Egg2中不是定义了private变量y么?实例化对象的时候给它赋值new了一个Yolk类的对象啊,所以调用了Yolk的构造函数啊
[/Quote]
+1
kyox0 2011-02-21
  • 打赏
  • 举报
回复
Egg2中不是定义了private变量y么?实例化对象的时候给它赋值new了一个Yolk类的对象啊,所以调用了Yolk的构造函数啊
Gray_Sky 2011-02-21
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 soli11722984 的回复:]
初学。。。。。。建议跳过这里

都涉及到内部类了,虽然还没涉及到更复杂的部分
[/Quote]

呵呵呵,也不是初学了,虽然账号很新……,看到这里时有点不明白!
soli11722984 2011-02-21
  • 打赏
  • 举报
回复
初学。。。。。。建议跳过这里

都涉及到内部类了,虽然还没涉及到更复杂的部分

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧