java - 这个内部类继承示例如何工作?

标签 java inheritance inner-classes

我正在阅读有关内部类继承的内容,但我在试图理解下面的代码如何工作时陷入困境:

class Outer{
    class Inner{
    }
}
class Derived extends Outer.Inner{
    Derived(Outer o){
        o.super();
    }
}

据我所知,关键字 super 指的是父类(super class),super() 指的是它的无参构造函数。对于外部类,父类(super class)是 Object 类。
我想了解这段代码是如何工作的。
为什么对象类的实例化使得扩展内部类成为可能?
创建对象类实例与创建外部类对象有什么关系?

删除包含“o.super();”的行导致错误:
java:需要包含 p.Outer.Inner 的封闭实例

我读了很多文章,但我不明白它是如何工作的。
我将不胜感激任何答案。

最佳答案

假设您有一个变量 o 引用 Outer 的实例,并且您想要使用其封闭实例创建 Inner 的实例是 o 的值。您可以调用:

Outer.Inner inner = o.new Outer.Inner();

这在 Java 中很少见(因为通常当您构造内部类时,您会使用“this”作为隐式封闭实例来实现),但它是有效的。

这实际上是等价的,但是是在子类构造函数的上下文中。 Inner确实有一个像这样的构造函数:

Inner(Outer enclosingInstance)

...并且此行有效调用

super(o)

...只是在语法中没有以这种方式表达来区分这种“特殊”信息和任何常规参数。

关于java - 这个内部类继承示例如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39330026/

相关文章:

java - 使用文件路径保存 HashMap

python - 如何从 python 中的 @staticmethod 函数中找出我被调用的类?

java - Java 中的内部类创建对 self 的引用作为属性

Java 验证 - 将 @Valid 约束添加到自定义约束会引发 "@Valid is not applicable to annotation type"

java - 寻找内存高效设计

java - 如何处理java streams api中的可选对象?

JavaScript继承: Setting property of sub-class from method of super class

python - 如何根据参数指定调用哪个__init__?

java - 从不使用公共(public)嵌套枚举?

java - 为什么我不能在 Java 的内部类中创建枚举?