Java 由另一个内部类扩展的内部类

Java 由另一个内部类扩展的内部类,java,inheritance,constructor,inner-classes,super,Java,Inheritance,Constructor,Inner Classes,Super,C类扩展B类时发生错误。但是,当我写新的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 in

C类扩展B类时发生错误。但是,当我写
新的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();
                }
            }
        }
    }

我的问题是为什么C类不能扩展B类?为什么要调用
newa().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的另一个实例。也就是说,类C可以扩展类B,从您问题的初始代码片段开始。您的代码语法正确,无需添加任何不必要的
newa().super()

考虑一下,让我们参考内部类的定义,这些定义是非静态的。对于静态情况,正确的名称是静态嵌套类

InnerClass的实例只能存在于OuterClass的实例中

要实例化内部类,必须首先实例化外部类


这意味着,内部类只存在于特定OuterClass实例的上下文中,而不存在OuterClass类,这就是为什么
new A()
确实解决了这个问题,提供了运行时实例,其中类
B
C
确实存在于这两个版本中(有和没有
new A().super()
编译对我来说很好。我正在运行java 1.8.0_144。您能更具体地说明“错误发生”和“问题”吗?关于“更好的解决方法”我会考虑将嵌套的类层次结构重构成单独的类,但当然这取决于实际代码是如何建模的。@亨利错误->没有A类型的封闭实例,因为一些中间结构“非静态内部”是一个重言式。调用新的A.()不解决问题。;解决了问题。请告诉我调用它的输出是什么?@Alice教程就在那里。你读了吗?调用
newa().super();
指示编译器创建
A
的新实例,然后调用超级构造函数(属于
C
,即
B
的构造函数)在
A
上(因此是
.super()
-部分)。因此,
C
实例绑定到新创建的
A
实例。@Turing85我同意A的新实例调用超级构造函数,但我不认为超级是C。@Alice
super
是相对于
C
进行解释的,而不是相对于
A
,从而调用
B
的构造函数。你能分享一下吗未正确编译的代码段?请考虑编译成功并打印“OK”的代码,请添加未编译的部分。