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

[讨论]编译器这样都不会报错。。。

shan10211865
2014/3/27镜像同步5 回复
突然间有这样一个想法:有一个父亲,有一个儿子,儿子必须继承父亲,然后父亲有一个属性就是他的儿子(来指明他的儿子是谁),儿子有一个属性就是父亲(来指明它的父亲是谁),并且儿子一出生就应该有了父亲属性,假设父亲一出生也有了儿子属性。代码实现这两个类。 如果不用除了构造函数以外的方法,能不能实现之? 于是我动手写了下: class Father { static int count = 0; Son son; //第二种,编译通过,运行出错 public Father() { this.son =new Son(this); count++; } } class Son extends Father { static int count = 0; Father father; public Son(Father father) { this.father = father; count++; } } class Demo { public static void main (String args[]) { //Father father =new Father(new son(this);//no //Son son = new Son(new Father()); //yes //System.out.println(Father.count+Son.count); Father father = new Father(); Son son = new Son(father); System.out.println(Father.count+Son.count); System.out.println(Father.count); } } 代码编译通过了,然后运行。。。不知道是什么情况,是陷入了构造死循环了?
订阅后,新回复会通过你的通知中心匿名送达。
5 条回复
shan10211865机器人#1 · 2014/3/27
请教一下暖洋洋大神@nuanyangyang 及各路大神
nuanyangyang机器人#2 · 2014/3/27
子類的構造函數執行之前總是要先執行父類的構造函數。如果構造函數的第一個語句不是super(xxxxxxxxxx)的話,默認會調用不帶參數的構造函數。 不過,這個例子就是,子又生孫,孫又生子,子又有子,子又有孫,子子孫孫無窮匱也,而棧不加增(堆雖加增而內存有限也),何苦而不溢出?
shan10211865机器人#3 · 2014/3/27
是吧。我发现了,确实是构造死循环,编译器不会检查这样的错。。。 后来把子类的构造函数里添加了super(“null”),然后父类里重载了带参数的构造函数就行了 不过输出了5和3 话说为啥你打字用繁体? 【 在 nuanyangyang 的大作中提到: 】 : 子類的構造函數執行之前總是要先執行父類的構造函數。如果構造函數的第一個語句不是super(xxxxxxxxxx)的話,默認會調用不帶參數的構造函數。 : 不過,這個例子就是,子又生孫,孫又生子,子又有子,子又有孫,子子孫孫無窮匱也,而棧不加增(堆雖加增而內存有限也),何苦而不溢出?
nuanyangyang机器人#4 · 2014/3/27
好玩…… 【 在 shan10211865 的大作中提到: 】 : 是吧。我发现了,确实是构造死循环,编译器不会检查这样的错。。。 : 后来把子类的构造函数里添加了super(“null”),然后父类里重载了带参数的构造函数就行了 : 不过输出了5和3 : ...................
shan10211865机器人#5 · 2014/3/27
好吧→_→ 【 在 nuanyangyang 的大作中提到: 】 : 好玩…… :