Java中内部类的层次结构

Mat*_*arz 7 java inheritance constructor inner-classes

我使用内部类的层次结构来表示应用程序中的一些数据,我遇到了一个我根本不理解的错误消息.我的代码可以归结为以下最小的例子:

public class A {
    public class B extends A {}
    public class C extends B {}
}
Run Code Online (Sandbox Code Playgroud)

Javac(当然我的IDE)无法使用以下错误消息编译代码:

A.java:3: cannot reference this before supertype constructor has been called
    public class C extends B {}
           ^
1 error
Run Code Online (Sandbox Code Playgroud)

我没有写this任何地方.没有比上面提供的更多的代码,所以我假设javac生成了与内部类相关的东西.

我找到了另一种表示我的数据的方法,所以我只是对它为什么不编译的一个很好的解释感兴趣.

sgo*_*les 8

您需要一个外部类实例来创建一个内部类实例,例如 new Outer().new Inner();

要使用另一个内部类(子内部类)扩展内部类(父内部类),您不能调用"父内部类"的构造函数,因为"外部类"的实例不存在.

试试这样,

public class A{        
    public class B extends A {
        B() { }  
    }    

    public class C extends B {
        C() { 
            new A().super();  
        }  
    }    

    public static void main(String args[])  {

    }      
}
Run Code Online (Sandbox Code Playgroud)

类似的问题:奇怪的情况为"在超类型构造函数被调用之前无法引用它"