内部 class 由另一个内部 class 扩展

inner class extended by another inner class

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(); 解决了问题?这是什么意思?有没有更好的方法来解决它(不使用静态嵌套class)?

将被编译并执行打印的最简单代码片段'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实例化,即classC可以扩展ClassB为您问题的初始代码片段。您的代码在语法方面是正确的,并且可以在不添加任何不必要的情况下编译 new A().super()

考虑一下,让我们参考tutorial for inner classes,那些根据定义是非静态的。对于静态情况,正确的名称是 static nested class

An instance of InnerClass can exist only within an instance of OuterClass

To instantiate an inner class, you must first instantiate the outer class

这意味着,inner class 仅存在于特定 OuterClass 实例的上下文中,而不是 OuterClass class,这就是 new A() 的原因解决问题,提供运行时 实例 其中 classes BC 确实存在