我正在阅读有关内部类继承的内容,但我在试图理解下面的代码如何工作时陷入困境:
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/