[英]What does super(s) in Child-class constructor?
我目前正面臨着super
關鍵字的理解問題。 我知道super
是對特定子類的下一個超類的引用。 無論如何,我想告訴你我的問題:
public class Father{
int length;
Father(String s){
length = s.length();
}
}
public class Sub extends Father {
char c;
Sub(String s) {
super(s);
c = s.charAt(0);
}
}
線路super(s)
在Sub類中做了什么? 如果我將父類從公開改為抽象,會發生什么?
如果您的方法覆蓋了其超類的方法之一,則可以通過使用關鍵字super來調用重寫方法。
如果我們談論的是構造函數,那么:
super()
,調用超類無參數構造函數; super(param list)
,調用具有匹配參數列表的超類構造函數。 在您的示例中,Sub類構造函數中的super(s)
將從父類調用適當的構造函數。
如果我將父類從公開改為抽象,會發生什么?
簡短回答 - 當一個類被聲明為abstract時,它無法實例化:
Father father = new Father("Name"); // Error => 'Father' is abstract;
Father father = new Sub("Name"); // Works, if non-abstract Sub extends Father
如果我將父類從公開變為抽象,會發生什么?
如果你使父類抽象,那么你有機會為它添加抽象方法 。
由於抽象類可能有也可能沒有抽象方法 ,所以在你的代碼中使父類抽象不會給出任何錯誤。
“super(s)”行在Sub類中做了什么
它調用了父類的參數化構造函數 。即使你沒有顯式調用父類的構造函數 ,也會調用父類的默認構造函數 。
super
關鍵字總是用於引用超類。
super(s)
表示調用具有匹配參數的超類構造函數。
因此,當你調用super(s)
它會調用超級構造函數
Father(String s){
length = s.length();
}
public class Sub extends Father {
char c;
Sub(String s) {
super(s);
c = s.charAt(0);
System.out.println(c);
}
}
public class Sub extends Father {
char c;
Sub(String s) {
super(s);
c = s.charAt(0);
System.out.println(c);
}
}
public class MainClass {
public static void main(String[] args) {
Sub s = new Sub("INDIA");
}
}
O / P:5我
如果你將父類更改為抽象而不是也將是相同的說明:super(s)是用於調用超類構造函數的關鍵字,因此如果將父類更改為抽象類,它只需使用參數構造函數調用父(超)類功能將與您不刪除1參數構造函數相同,因此它將以相同的方式調用您的抽象類構造函數
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.