簡體   English   中英

為什么MyClass中的默認構造函數調用Object類的超級ie

[英]why does the default constructor in MyClass calls super i.e of Object class

我一直在使用Java,並且學習有關類中默認構造函數的問題。 Why does it call super (constructor of Object class.I know it does constructor chaining)?. For what reasons it is required Why does it call super (constructor of Object class.I know it does constructor chaining)?. For what reasons it is required 如果我這樣定義一個類

MyClass 
{

    public MyClass()
       {

       }
}

編譯器在構造函數中添加了super。

public MyClass()
{
   super();  
}

PS我已經嘗試使用Google搜索,並且已經閱讀了Oracle Doc,但是找不到答案。為什么? 謝謝你的時間。

每個構造函數都必須調用同一類的不同構造函數或其直接超類的構造函數。 如果未顯式調用,則隱式添加對超類構造函數的調用。

由於類的實例繼承其祖先的狀態,因此它必須通過調用其祖先的構造函數來對其進行初始化。

在您的情況下, MyClassObject的直接子類,因此您的構造函數必須調用Object的構造函數。

一個類始終是一連串的類,並且始終以Object結尾(其中Object是唯一的例外;它沒有超類)。

如果創建了新實例,則必須初始化鏈中的所有類,否則它們的狀態將是不確定的。 這也適用於似乎不需要初始化的類(例如Object)。

初始化是部分隱式完成的(變量獲取其默認值),而另一部分則總是通過在類中調用構造函數來完成。

為什么調用超類(Object類的構造函數。我知道它進行構造函數鏈接)? 出於什么原因需要它?

考慮以下示例:

class A {
  protected String s;
  A () {
    this.s = "hello";
  }
}

class  B extends A {
  public String get() {
    return s;// s is inherited from A
  }
}

// A's default constructor is invoked here
System.out.println(new B().get());// prints hello

可以說,現在Java在構造函數中不包含super()

// A's default constructor is not invoked here
System.out.println(new B().get());// prints null

它給出null作為類類型的默認值。 由於A的構造函數沒有被調用的新實例B的實例變量A沒有被初始化。

暫無
暫無

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

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