当前位置:编程学习 > JAVA >>

JAVA继承求助

class A {
public B a = new B();
}

public class B extends A {
int x = 1000;

public void f() {
System.out.println(a.x);
}

public static void main(String[] args) {
new B().f();
}
}
上面代码运行出错:Exception in thread "main" java.lang.StackOverflowError
现在希望在函数F()里面输出这个子类B的属性X的值。但想通过父类A里面的属性输出,这个属性还不能是STATIC型的。可行吗? --------------------编程问答-------------------- 你这个类定义的

new B()时,必new A(),因为A是B的超类。
new A()时,必new B(),因为B是A的默认属性。

这个不就死循环了么,对象都建在Stack(堆)上,不溢出才怪 --------------------编程问答-------------------- 晕死,死循环你都能设计出来,不得不佩服楼主! --------------------编程问答--------------------
引用 1 楼 trocp 的回复:
你这个类定义的

new B()时,必new A(),因为A是B的超类。
new A()时,必new B(),因为B是A的默认属性。

这个不就死循环了么,对象都建在Stack(堆)上,不溢出才怪


这个解释很到位 --------------------编程问答-------------------- B继承A ,new B();时现执行new A();又因为 new A();时必须初始化public B a = new B();这样就会重复执行上面的步骤形成了一个死循环,每一个方法都在一个线程栈中执行的,每次调用构造函数都会从线程中分配一块栈内存,死循环就会把线程现有栈内存耗尽,所以就会抛出 java.lang.StackOverflowError。 --------------------编程问答-------------------- 楼主高人啊 --------------------编程问答-------------------- http://bbs.csdn.net/topics/390267880#r_80065845
这里都给你回答的很清楚了,又发一帖,lz是在散分??? --------------------编程问答-------------------- 死循环AB循环创建     --------------------编程问答-------------------- 楼主不用那么费事,只要这样就死循环了:
class A {
public B a = new B();
}

public class B extends A {
public static void main(String[] args) {
new B();
}
} --------------------编程问答-------------------- 除
补充:Java ,  Java相关
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,