2017-04-09 82 views
3

我目前正在面對一個關於super關鍵字的理解問題。我知道super是對特定子類的下一個超類的引用。無論如何,我想告訴你,我的問題:什麼是超級(s)在Child-class構造函數中?

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)做在子類?如果我將父類從公共更改爲抽象,會發生什麼?

回答

0

super關鍵字總是用來引用超類。

super(s)表示調用具有匹配參數的超類構造函數。

所以,當你調用super(s)它調用超級構造

Father(String s){ 
     length = s.length(); 
    } 
+0

嘿,忘了回答他的問題的第二部分。 :-P –

+1

@TilakMaddy這就是爲什麼你應該只問一個問題每個問題。 –

2

如果你的方法會覆蓋其父類的方法之一,您可以通過使用關鍵字super的調用重寫的方法。

如果我們談論的構造函數,則:

  • super(),超無參數的構造函數被調用;
  • super(param list),調用具有匹配參數列表的超類構造函數。

在你的例子中,子類構造函數super(s)將從父類中調用合適的構造函數。

如果我將父類從公共更改爲抽象,會發生什麼?

簡短的回答 - 當一個類被聲明爲抽象的,它不能被實例化:

Father father = new Father("Name"); // Error => 'Father' is abstract; 
Father father = new Sub("Name"); // Works, if non-abstract Sub extends Father 
1

,如果我父類從公共更改爲抽象的,會發生什麼?

如果你讓父類的抽象,那麼你就有機會添加抽象方法它。

由於抽象類可能有也可能沒有抽象方法,所以在你的代碼中,父類抽象不會給出任何錯誤。

什麼行「超級(S)」不要在子類

它調用參數化的構造函數父親class.Even的如果你還沒有明確提出父親的構造類,父類的默認構造函數將被調用。

0
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我

如果更改父類摘要比也將是相同的 說明: 超(S)是用來調用父類的構造函數,因此只需要調用關鍵字如果將父類更改爲抽象類,則父類(超類)帶參數構造函數 那裏的功能將與您未刪除1參數構造函數的功能相同,因此它將以相同的方式調用您的抽象類構造函數