这个内部 class 继承示例如何工作?

How this Inner class inheritance example works?

我正在阅读有关从内部 classes 继承的内容,但我在试图理解下面的代码如何工作时遇到了困难:

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

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

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

我看了很多文章,但我不知道它是如何工作的。
我将不胜感激。

假设您有一个引用 Outer 实例的变量 o,并且您想创建一个 Inner 的实例,其封闭实例的值为 [=13] =].您可以致电:

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

它在 Java 中很少见(因为通常当你构造一个内部 class 时,你会用 "this" 作为隐式封闭实例),但它是有效的。

这实际上等同于那个,但是在 subclass 构造函数的上下文中。 Inner class 确实 有这样的构造函数:

Inner(Outer enclosingInstance)

...并且这一行 有效地 调用

super(o)

...只是在语法中没有以这种方式表达以区分此 "special" 信息和任何常规参数。

Why instantiation of Object class makes extending Inner class possible?

In Inner instance需要一个Outer instance作为inner instance。没有它的外部实例就没有意义。如果有一个没有外部的内部确实有意义,你会做到 static

What creating an Object class instance has to do with creating Outer class object?

在创建内部实例之前,您需要一个外部实例。

I read many articles but I can't figure out how it works.

它设置了 Inner super-class 需要的 Outer 实例。

你像这样实例化内部 class Outer outer = new Outer(); Inner inner = outer.new Inner();

Class Inner 被称为嵌套内部 class 并绑定到外部 class 以这样的方式初始化它需要使用实例外部 class 像这样 Outer.Inner inner = (new Outer()).new Inner();

如果您的内部 class 是使用 static 修饰符声明的,它将是静态嵌套 class 并且不需要外部 class 的实例来初始化新实例像这样:Outer.Inner inner = new Outer.Inner();