2014-06-19 73 views
1

過去,我有這樣的Java的設置從超級擴展類的一個在對象

public class User implements UserInterface, Parcelable 
{ 
    public User(int userID, String firstName, String lastName, String mobileNumber, Date dateAccountCreated) 
    { 
     this.userID = userID; 
     this.firstName = firstName; 
     this.lastName = lastName; 
     this.mobileNumber = mobileNumber; 
     this.dateAccountCreated = dateAccountCreated; 
    } 
} 

一類,然後我具有延伸到該另一個類:

public class Invitee extends User 
{ 
    private int eventDescision; 
    public Invitee(User u, int eventDescision) 
    { 
     super() = u; 
     this.eventDescision = eventDescision; 
    } 
} 

顯然,這條線super() = u;不起作用。然而,我怎樣才能實現這個功能,我通過被邀請者接收的用戶對象並將其設置爲擴展對象,而無需創建另一個構造函數?我知道我可以將對象作爲一個帶有getter和setter的變量,但是,我喜歡它的流動方式,而不是這樣做,被邀請者始終是用戶。

+0

你同意一些答案嗎?請將其中一個標爲正確或澄清您在評論中的疑問。 – logoff

回答

3

UserInvitee構造函數接收是一個真正的實例,要創建一個又一個。您不能在超級構造函數中分配一個實例,只能使用複製構造函數將其複製。

1

它應該是:

super(u.getUserID(), 
     u.getFirstName(), 
     u.getLastName(), 
     u.getMobileNumber(), 
     u.getDateAccountCreated()); 
+0

要麼,要麼添加一個構造函數,它需要一個User實例,並調用super(u); – Stultuske

+0

是的,我假設他不想改變他的'用戶'類,但通常你是對的。 :) –

+0

然後我會這樣做。我以爲你會做我想做的事。我認爲這應該是可能的。 – bubblebath

0

您不能自動將基類的實例傳遞給子類的構造函數中基類的構造函數調用(super)。

您可能想要做的是在super調用中傳遞基類的屬性。

例如是用戶屬性是公開

public Invitee(User u, int eventDescision) { 
    super(u.userID, u.firstName, u.lastName, u.mobileNumber, u.dateAccountCreated); 
... 
0

您可以:

  1. 使用裝飾設計模式在被邀請者
  2. 定義costructor用戶(U)
  3. 人們以前曾使用過:使用super()所有參數

請記住super調用超類的構造函數,所以你不能調用未定義的構造函數。

相關問題