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

时间:2017-09-15 08:19:03

标签: java inheritance constructor inner-classes super

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

1 个答案:

答案 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()解决问题的原因,提供运行时实例 BC确实存在