[英]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.Inner
, SubClass
構造函數需要有一個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.