将Inner类扩展为嵌套类?

时间:2013-12-01 20:10:59

标签: java compiler-errors compiler-warnings inner-classes

我正在学习嵌套和内部类,这让我想到是否可以将Inner类扩展为嵌套类。例如。

public class Outer{

    public class Inner{
        // notice the lack of static keyword
    }
}


public class ExtendedOuter extends Outer{

    public static class ExtendedInner extends Inner{
        // notice the static keyword
    }
}

我确实尝试编译上面的代码但我不能,但是我收到的编译时错误让我相信可能有一个解决方法。但是,我可以将Nested类扩展为Inner类。

这是我收到的编译时错误。

  

Outer类型的封闭实例不在范围内

3 个答案:

答案 0 :(得分:3)

内部类具有对外部类的引用。您无法在子类中删除它。这就像删除子类中的字段一样。

答案 1 :(得分:1)

你的问题没有意义。内部类已经是嵌套类,因此在另一个类中定义的任何其他类也是如此。显然你不知道这些词是什么意思:

  • 嵌套类:在另一个类中声明的类
  • 内部类:未声明为“静态”的嵌套类。

请注意,'static nested'和'inner'是互斥的。另请注意,内部类可以扩展静态嵌套类,但反之亦然。

您的代码实际上要做的是将内部类扩展为静态类,这是导致错误的原因。不是因为扩展类是嵌套的。

答案 2 :(得分:1)

实际上你可以扩展内部类。您只需提供该类将绑定的Outer实例。为此,您必须使用实例显式调用super构造函数。

public class Outer {
    public class Inner{
        // notice the lack of static keyword
    }
}

public class ExtendedOuter extends Outer {

    private static Outer outer = new ExtendedOuter(); // or any other instance

    public static class ExtendedInner extends Inner {
        public ExtendedInner() {
            outer.super(); // this call is explicitly required
        }
    }

}

如果您有一个嵌套类,可以从另一个封闭类扩展另一个嵌套类,那么这也有效。