我知道这是没有意义的:我只是觉得很有趣,我想更多地询问创建继承自己的类时会发生什么机制,从而导致堆栈溢出崩溃。 Java允许您从这样的构造开始就令人惊奇。
我只是在猜测,但是JVM是将自己置于无限循环中,试图在实例化类之前解析该类,还是实际上是在无休止地实例化该类的多个副本?
我应该更具体一些;我正在使用内部类从封闭类派生。
public class Outside {
private int outsideValue;
public class Inside extends Outside {
private int insideValue;
public Inside(int val) {
insideValue = val;
}
}
public Outside() {
Inside o = new Inside(0);
}
}
public class Main {
public static void main(String args[]) {
Outside o = new Outside();
}
}
最佳答案
请记住,由于Inside
扩展了Outside
,因此它对super()
进行了隐式调用,它是Outside
的构造函数(反过来又称为Inside
的构造函数),因此它可以解决。
您在上发布的代码在概念上与以下程序相同:class A {
B b = new B();
}
class B extends A {
}
public class Test {
public static void main(String[] args) {
new A(); // Create an A...
// ... which creates a B
// ... which extends A thus implicitly creates an A
// ... which creates a B
// ...
}
}