2016-03-26 72 views
1
public void setName (String n){} 
public void setAfm (String a){} 

這些是我需要調用的超類方法。如何在子類中使用超類方法java

SalariedEmployee(){ 
    name = super.setName(String n); 
    afm = super.setAfm(String a); 
    salary = payment(); 

而那就是子類中的構造函數。我怎樣才能正確地調用方法。我不想在SalariedEmployee中使用任何參數,我想用超類方法設置名稱和afm。但我的方法是無效的。所以我想我必須改變那個權利?還是我錯過了別的? 在此先感謝!

+0

你似乎很困惑,setters是'void',所以你不能說'name =','afm ='(我不知道'payment')。其次,你不要在調用中指定類型 - 你給出一個值'super.setName(「A Name」);''你不需要*說'super.';這足以說'setName(「A Name」);' –

回答

1

編輯:你也可以使用setters。只有當你想從你在子類中重寫的超類中調用一個方法時,「super」關鍵字纔是必需的。

您應該使用構造函數來設置初始值,但使用制定者是一個可能的解決方案過於:

class Employee { 
    String name; 
    String afm; 

    public Employee() { 
    } 
    public Employee(String name, String afm) { 
     super(); 
     this.name = name; 
     this.afm = afm; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public void setAfm(String afm) { 
     this.afm = afm; 
    } 

} 

class SalariedEmployee extends Employee { 
    //Using constructors 
    public SalariedEmployee(String name, String afm) { 
     super(name, afm); 
     salary = payment(); 
    } 
    //using setters 
    public SalariedEmployee() { 
     setAfm("afm"); 
     setName("name"); 
     salary = payment(); 
    } 
} 

也像「的setName」 setter方法應該是無效的,因爲你不希望它返回什麼不同例如getter方法。

+0

這就是我原來寫的。在Employee類中,我需要編寫這些方法(這是說明)。所以我想過使用它們。所以你說的是我不能用這些超類方法設置初始值? –

0

有兩種情況需要調用super方法。第一種情況是該方法未被子類覆蓋。

this.setName("Dick Aceman"); 
this.setAtf("Acebook"); 

防彈方式:如果是這樣的話,你可以簡單地通過調用

setName("Dick Aceman"); 

setAtf("Acebook"); 

,如果你打電話給他們這樣更描述調用這些方法給他們打電話是這樣的:

super.setName("Dick Aceman"); 
super.setAtf("Acebook"); 

即使方法被覆蓋,最後一個仍然有效,但通常認爲它太過描述,所以只有在沒有其他選擇的情況下才應使用這種方法調用。請注意,由於您的方法是公共的,它們被子類繼承。

你嘗試的問題,表示:

  • 你試圖分配return值的方法變量,當方法不返回值
  • 你聲明的方法調用,其類型無效
  • 您使用的a的不確定變量和n

你應該看一些教程VI deos,那麼你將獲得基礎知識。看完這樣的視頻後,你應該回到這個答案。

相關問題