[英]Calling a subclass constructor from a superclass
我第一次遇到Java继承问题,而构造函数却遇到了问题。
考虑A级
class A{
...(Constructor) {
...
ObjectCreatedBySubClass= new B();
}
...(etc)
protected static B ObjectCreatedBySubClass;
}
及其子类
class B extends A{
B(){
..(No matter what code I put here, it does not work.)
}
...(Instance variables)
}
无论我改变什么,每次得到
Exception in thread "main" java.lang.StackOverflowError
at A.<init>
at B.<init>
(repeat about 100 times)
我的教授解释说,我不应该像在这里那样“扩展”“有”关系。 我将使用合成而不是继承来解决我的问题,但是我的问题是
我不明白为什么会发生此问题。 由于(我假设)某种无限循环,它用尽了内存,但我不知道为什么。 在这种情况下,如何正确使用继承?
任何帮助将不胜感激。
由于B扩展了A,因此每次调用B的构造函数时,您也将调用A的构造函数。 但是,在实现A的构造函数时,您实例化了一个B,在构造B时,它调用了A的构造函数。 这种循环依赖性永远不会中断,这会导致堆栈溢出。
这是因为在内部构造B时构造A时,调用子类的构造函数时,也会调用超类的构造函数。 因此它处于无限循环中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.