[英]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.