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();
解决了这个问题?这是什么意思?有没有更好的方法来解决它(不使用静态嵌套类)?
答案 0 :(得分:3)
最简单的代码片段,将编译并执行打印'确定':
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类可以从您的问题中扩展B类。您的代码在语法方面是正确的,并且可以在不添加任何不必要的new A().super()
考虑一下,让我们引用内部类的tutorial ,根据定义,它们是非静态的。对于静态情况,正确的名称是静态嵌套类
InnerClass的实例只能存在于OuterClass
的实例中要实例化内部类,必须首先实例化外部类
这意味着,内部类仅存在于特定OuterClass实例的上下文中,而不是OuterClass类,这就是new A()
解决问题的原因,提供运行时实例 类 B
和C
确实存在