Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将内部类扩展为嵌套类?_Java_Compiler Errors_Compiler Warnings_Inner Classes - Fatal编程技术网

Java 将内部类扩展为嵌套类?

Java 将内部类扩展为嵌套类?,java,compiler-errors,compiler-warnings,inner-classes,Java,Compiler Errors,Compiler Warnings,Inner Classes,我正在学习嵌套类和内部类,这让我思考是否可以将内部类扩展为嵌套类。比如说 public class Outer{ public class Inner{ // notice the lack of static keyword } } public class ExtendedOuter extends Outer{ public static class ExtendedInner extends Inner{ // notice

我正在学习嵌套类和内部类,这让我思考是否可以将内部类扩展为嵌套类。比如说

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
    }
}
我确实试过编译上面的代码,但我不能,但我收到的编译时错误让我相信可能有解决办法。但是,我可以将嵌套类扩展为内部类

这是我收到的编译时错误

作用域中没有外部类型的封闭实例


内部类具有对外部类的引用。不能在子类中删除它。这类似于删除子类中的字段。

内部类具有对外部类的引用。不能在子类中删除它。这就像删除子类中的字段。

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

  • 嵌套类:在另一个类中声明的类
  • 内部类:未声明为“静态”的嵌套类
请注意,“静态嵌套”和“内部”是互斥的。还请注意,内部类可以扩展静态嵌套类,但反之亦然


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

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

  • 嵌套类:在另一个类中声明的类
  • 内部类:未声明为“静态”的嵌套类
请注意,“静态嵌套”和“内部”是互斥的。还请注意,内部类可以扩展静态嵌套类,但反之亦然


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

实际上,您可以扩展内部类。您只需提供类将绑定到的
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
        }
    }

}

如果您有一个嵌套类从另一个封闭类扩展另一个嵌套类,则此方法也有效。

实际上,您可以扩展内部类。您只需提供类将绑定到的
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
        }
    }

}

如果您有一个嵌套类从另一个封闭类扩展另一个嵌套类,则此操作也有效。

a
static
类不能扩展非
static
内部类。
internal
应该是静态的,否则它必须绑定到
Outer
的实例,正如错误消息告诉您的那样。
静态
类不能扩展非
静态
内部类。
内部
应该是静态的,否则它必须绑定到
外部
的实例,正如错误消息告诉您的那样。我明白了,换句话说,没有变通方法,内部类不能扩展为嵌套类,对吗?谢谢你的回答。内部类引用外部类。您可以通过使嵌套类为静态而不是内部类来删除它。@twimB因为它没有意义,不。我明白了,换句话说,没有解决方法,内部类不能扩展为嵌套类,对吗?谢谢你的回答。内部类引用外部类。您可以通过使嵌套类成为静态而不是内部类来删除它。@twimB因为它没有意义,不。对我来说,这个问题很有意义,因为这个目的只是想知道是否有可能,我还没有意识到需要在代码中应用上述内容。编译时的错误让我认为可能有办法做到这一点。如果你已经理解了我的答案,你也应该明白这个问题并没有被问到的意义。因此,你还不明白我的答案。我建议你再读一遍。我已经告诉过你什么是可能的,什么是不可能的,但是你甚至不需要问已经在逻辑上包含的东西是否是“可能的”。你显然对术语有误解。您在代码中实际尝试的不是嵌套的扩展,而是静态的扩展。这不是同一件事。也许是我没有得到你在回答中试图解释的东西。然而,彼得·劳里的回答让我明白了。如果我问了一个稍微不同的问题,比如“是否可以将非静态嵌套类扩展为静态嵌套类”,那么对您来说可能更有意义。我知道非静态嵌套类必须绑定到封闭类的实例。谢谢你的回答。这个问题对我来说很有意义,因为这个目的只是想知道它是否可行,我还没有意识到需要在我的代码中应用上面的内容。编译时的错误让我认为可能有办法做到这一点。如果你已经理解了我的答案,你也应该明白这个问题并没有被问到的意义。因此,你还不明白我的答案。我建议你再读一遍。我已经告诉过你什么是可能的,什么是不可能的,但是你甚至不需要问已经在逻辑上包含的东西是否是“可能的”。你显然对术语有误解。您在代码中实际尝试的不是嵌套的扩展,而是静态的扩展。这不是同一件事。也许是我没有得到你在回答中试图解释的东西。然而,彼得·劳里的回答让我明白了。如果我问一个稍微不同的问题,比如“有可能扩展非静态嵌套clas吗?”