我正在学习嵌套和内部类,这让我想到是否可以将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类型的封闭实例不在范围内
答案 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
}
}
}
如果您有一个嵌套类,可以从另一个封闭类扩展另一个嵌套类,那么这也有效。