繁体   English   中英

从超类调用子类构造函数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM