Java:继承self的类

Tur*_*oes 8 java oop inheritance

我知道这是毫无意义的:我发现它很有趣,我想更多地询问当你创建一个继承自身的类时会发生什么的机制,导致堆栈溢出崩溃.令人惊讶的是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();
    }
}
Run Code Online (Sandbox Code Playgroud)

aio*_*obe 8

请记住,因为Insideextends 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
                 //   ...
    }
}
Run Code Online (Sandbox Code Playgroud)