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生成了与内部类相关的东西.
我找到了另一种表示我的数据的方法,所以我只是对它为什么不编译的一个很好的解释感兴趣.
您需要一个外部类实例来创建一个内部类实例,例如 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)
类似的问题:奇怪的情况为"在超类型构造函数被调用之前无法引用它"
| 归档时间: |
|
| 查看次数: |
869 次 |
| 最近记录: |