簡體   English   中英

如何定義繼承內部類的子類的構造函數?

[英]how to define constructor of a subclass inheriting an inner class?

我正在學習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
}

PS。 這是一個多項選擇題。 預計只有1個答案

我是java新手,對這些高級主題了解不多

謝謝

以下是來自JLS的示例,它遵循相同的邏輯,但不傳遞封閉的實例,而是直接在構造函數中創建它:

例8.8.7.1-1。 合格的超類構造函數調用

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

超類構造函數調用可以細分:

  • 非限定超類構造函數調用以關鍵字super開頭(可能以顯式類型參數開頭)。

  • 合格的超類構造函數調用以Primary表達式開頭。

它們允許子類構造函數顯式指定新創建的對象關於直接超類(第8.1.3節)的直接封閉實例。 當超類是內部類時,這可能是必要的

擬議答案中最接近的案例是

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

要擴展作為Outer內部類的Outer.InnerSubClass構造函數需要有一個Outer實例作為封閉類型。

outer.super(); 將調用作為Inner構造函數的Outer父類的構造函數。

outer.super(); 語法可能令人不安,因為我們通常不對構造函數的參數調用super() ,但是在擴展內部類的類的情況下,子類的構造函數允許這種語法。

我不認為,“外部”類可以擴展內部類。 該構造意味着,一個類可以訪問另一個類的私有成員。

但是,您可以擁有一個擴展同一外部類的另一個內部類的內部類。

對於構造函數,外部實例在實例化中指定,而不是作為參數:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM