2014-02-11 112 views
0

我有兩個類如下。我想在單個構造函數TestEmployee()中訪問this()和super()構造函數。當前方法無法編譯。在Java中有沒有其他的方法,所以我可以在同一個構造函數體中調用this()和super()。在Java中,有沒有什麼方法可以在同一個構造函數中調用this()和super()?

class Employee{ 
    double salary; 
    Employee(double salary){ 
     this.salary = salary; 
    } 
} 
class TestEmployee extends Employee{ 
    TestEmployee(){ 
     super(1000000); 
     this(10000); 
    } 
    double bonus; 
    TestEmployee(double bonus){ 
     this.bonus = bonus; 
    } 
} 
+6

任何其他方法叫在同一個構造函數中調用'super()'和'this()'沒有任何意義......最好有一個構造函數接受'salary'和'bonus'兩個參數並調用'this(10000,10000) 。 –

+4

請注意,你的'TestEmployee(double bonus)'實際上是這樣的:'{super(); this.bonus =獎金; }這意味着你會調用兩個超類的構造函數。這就是爲什麼這種功能沒有意義。 –

回答

3

顯然沒有,這兩個超級本必須是構造函數的第一個語句body.And只能有一個第一條語句

+0

這是我的朋友。 –

-1

正如其他人所說,爲什麼你甚至想。這個不成立。
你可以通過調用另一個構造函數來調用它的超類構造函數來僞造它。但是,如果調用另一個構造函數的唯一原因是傳遞給另一個超類構造函數,而不是被稱爲默示構造函數的構造函數,那麼設計幾乎肯定會有一些嚴重錯誤。

+0

我同意朋友,但是,那不是我所關心的。我想知道的只是「我們能否做到這一點,如果是的話,如果沒有,爲什麼?」 –

0

這是沒有意義的,因爲TestEmployee有一個工資,它被傳入併發送到基類Employee因爲TestEmployee來自Employee。獎金是一個單獨的補償部分,將分開存儲。理想情況下,在Employee基類中可以有不同的構造函數,它允許傳遞salarybonus,其中TestEmployee可以訪問。

0

正如其他人所說的,你不能按照你想要的方式完成你想要的方式。然而,你可以做的是設計你的課程有點不同,這樣你就可以達到同樣的目標。

class Employee{ 
    double salary; 
    Employee(double salary){ 
     this.salary = salary; 
    } 
} 
class TestEmployee extends Employee{ 
    TestEmployee(double salary, double bonus){ 
     super(salary); 
     this.bonus=bonus; 
    } 

    double bonus; 
} 

然後,如果你想要一個默認TestEmployee構造函數,你可以這樣做:

TestEmployee() { 
    this(1000000,10000); 
} 
+0

這不是實際的情況,我甚至不知道實際的使用情況,因爲我會像你所做的那樣做類似的事情。 我想確認的是「是否有可能」。答案是「否」。 感謝您的回覆朋友。 –

0

爲了避免重複代碼,你可以定義做所有initlization塊爲您的所有構造函數的非靜態方法。你可以包括你的電話到超()下面這個方法來初始化object.But的缺點..它可以從class.So內它不是一個好的設計模式

class TestEmployee extends Employee{ 

     double bonus; 

     TestEmployee(){ 
      super(1000000); 
      intialize(10000); 
     } 

     TestEmployee(double bonus){ 
      super(bonus); 
      intialize(bonus); 
     } 
     private void intialize(double bonus) 
     { 
      this.salary = bonus; 
     } 
    } 
+0

簡單而不錯的解決方案先生。 –

相關問題