簡體   English   中英

在構造函數中調用super()

[英]Calling super() in constructor

我只是使用Eclipse的“使用字段生成構造函數”功能,它為我提供了以下構造函數:

public Credentials(String userName, String password) {
    super();
    this.userName = userName;
    this.password = password;
}

Credentials類沒有顯式擴展另一個類,因此我猜想它擴展了Object 什么是super(); 通話好嗎?

如果要將構造函數定義為:

public Credentials(String userName, String password) {
    this.userName = userName;
    this.password = password;
}

然后,無論如何編譯器都會向超類構造函數添加隱式調用,因此這對編譯后的代碼沒有任何影響

Credentials類沒有顯式擴展另一個類,因此我猜想它擴展了Object。 什么是super()? 通話好嗎?

但是您的類隱式擴展了Object ,因此將對Object()進行調用。

super關鍵字是對當前超類的“封閉”實例的引用。

您可以使用它來訪問超類的方法或字段(如果它們可見)。 如果您的類沒有超類(由class Credentials extends SuperclassName指定),則該超類將自動為Object

super()作為方法調用調用超類的構造函數(不帶參數的構造函數)。 您只能調用自己的類的構造函數,而不能使用任何其他方法。

例:

class A {
  private String m_name;
  public A(String name){
    m_name = name;
  }
}

class B extends A {
  public B(String firstName, String lastName){
    //this calls the constructor of A
    super(firstName + " " + lastName);
  }
}

super()調用不帶參數的父構造函數。

要使用if作為參數,例如super(您的參數),它將調用接受參數類型(如果存在)的一個參數的構造函數。

也可以用於從父級調用方法。 即super.yourMethod()

super()調用父類的構造函數,如果您不添加此行,則默認情況下將調用非arg構造函數。

如果父類沒有非args構造函數,並且您不會調用其他構造函數,則您的代碼將無法編譯

暫無
暫無

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

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