由另一个内部类扩展的内部类
问题描述:
当发生class C extends B
时发生错误。但是,当我写new A().super();
问题解决了。请考虑下面的代码:由另一个内部类扩展的内部类
public class A {
public class B extends A {
public class C extends B {
public C() {
// No enclosing instance of type A is available due to some intermediate constructor error
// new A().super();
}
}
}
}
我的问题是,为什么class C cannot extend Class B
?为什么打电话new A().super();
解决了这个问题?这是什么意思?有没有更好的方法来解决它(不使用静态嵌套类)?
答
将被编译和执行打印“OK”
最简单的代码片断:
public class A {
public class B extends A {
public class C extends B {
public C() {
System.out.println("OK");
}
}
}
public static void main(String[] args) {
new A().new B().new C();
}
}
这里是A,B和C.即实例化的另一example,C类可以延伸乙类如你的问题的初始代码片段。您的代码在语法方面是正确的,并且可以无需增加任何不必要的new A().super()
对于考虑进行编译,让我们参考tutorial为内部类,这些定义都是非静态的。对于静态情况下,正确的名称是Static Nested Class和
将InnerClass的实例可以的在OuterClass
一个实例中只存在实例化一个内部类,你必须先实例化外部类
这意味着,内部类只存在于特定的OuterClass实例而不是OuterClass类的上下文中,这就是为什么new A()
确实解决了问题,因此提供了运行时实例其中类B
和C
确实存在
两个版本(有和没有'新的A()。super();'编译对我来说很好。我正在运行java 1.8.0_144。 – Turing85
关于“发生错误”和“问题”,你能更具体吗? – Henry
关于“更好的解决方法”,我会考虑将嵌套类层次重构为单独的类,但当然取决于实际代码的建模。 –