Java : Class inheriting self

后端 未结 8 1836
悲&欢浪女
悲&欢浪女 2021-02-15 11:21

I know this is pointless: I just find it funny and I want to inquire more about the mechanics of what happens when you create a class that inherits itself, resulting in a stack

相关标签:
8条回答
  • 2021-02-15 11:50

    In its final form this problem has nothing to do with cyclic inheritance and inner classes. It's just an infinite recursion caused by unbound recursive constructor call. The same effect can be shown by the following simple example:

    public class A {
        public A() {
            new A();
        }
    }
    

    Note that this code is perfectly valid, since Java doesn't apply any restrictions on recursive calls.

    In your case it's slightly more complicated due to inheritance, but if you recall that constructor of subclass implicitly call a constructor of superclass, it should be clear that these calls form infinite recursion.

    0 讨论(0)
  • 2021-02-15 11:53

    Extending oneself generates an error of cyclic inheritance (which java doesn't allow). Your code sample does compile and is valid.


    Due to Vladimir Ivanov's persistence, I will fix my edit.

    Your code throws a StackOverflowError because of the following.

    Inside o = new Inside(0);
    

    Since Inside extends Outside, Inside first calls the super() method implicitly (since you've not called it yourself). Outside() constructor initializes Inside o and the cycle runs again, until the stack is full and it overflow (there's too many Inside and Outside inside the heap stack).

    Hope this helps especially Vladimir Ivanov.

    0 讨论(0)
提交回复
热议问题