如何定义继承内部类的子类的构造函数?



我正在学习Java的内部和外部类。我知道什么是内部类和外部类以及为什么使用它们。我遇到了以下关于这个主题的问题,但找不到答案。

假设给出以下代码:

class outer{
class inner{
}
}
class SubClass extends outer.inner{
}

问题:应该如何定义最小子类构造函数?为什么?

Option 1-
Subclass () {
//reason: bacause the default constructor must always be provided
}
Option 2-
Subclass (Outer outer) {
//reason : because creating an instance of **Subclass** requires an instance 
//of outer, which the **Subclass** instance will be bound to
}
Option 3-
Subclass (Outer outer) {
outer.super();
//reason : because creating an instance of **Subclass** requires an explicit 
//call to the **Outer's** constructor, in order to have an enclosing instance 
//of **Outer** in scope.
}
Option 4- 
Subclass (Outer.inner inner) {
//reason : bacause an instance of **inner** is necessary so that there is a 
//source to copy the derived properties from
}

附言。这是一个多项选择题。预计只有 1 个答案

我是 Java 新手,对这些高级主题了解不多

谢谢

下面是来自JLS 的示例,它遵循相同的逻辑,但不传递封闭实例,而是直接在构造函数中创建它:

例 8.8.7.1-1.限定的超类构造函数调用

class Outer {
class Inner {}
}
class ChildOfInner extends Outer.Inner {
ChildOfInner() { (new Outer()).super(); }
}

超类构造函数调用可以细分为:

  • 非限定超类构造函数调用以关键字 super 开头 (可能以显式类型参数开头(。

  • 限定的超类构造函数调用以主类开头 表达。

它们允许子类构造函数显式指定新的 创建的对象的直接封闭实例相对于 直接超类 (§8.1.3(。当超类时,这可能是必要的 是一个内部类

建议答案中最接近的情况是

public SubClass(Outer outer) {
outer.super();
}

为了扩展Outer.Inner作为Outer的内部类,SubClass构造函数需要有一个封闭类型的Outer实例。

outer.super();将调用作为Inner构造函数的Outer父类的构造函数。

outer.super();语法可能会令人不安,因为我们通常不会super()构造函数的参数上调用,但在类扩展内部类的情况下,子类的构造函数允许这种语法。

我不认为"外部"类可以扩展内部类。该构造意味着,一个类可以访问另一个类的私有成员。

但是,您可以有一个内部类来扩展同一外部类的另一个内部类。

至于构造函数,外部实例是在实例化中指定的,而不是作为参数指定的:

class Outer {
class Inner {
...
}
class SubInner {
...
}
void method() {
Inner i = this.new SubInner();
}
}

相关内容

  • 没有找到相关文章

最新更新