簡體   English   中英

Child-class構造函數中的super是什么?

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

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