我不確定從父代到子代向下轉換或從A
中創建B
()的最佳做法是什麼。使用父配置實例化子對象或「向父代父子代」
作爲一個例子,我有兩個類:
父之一:
public class SoccerPlayer {
private String name;
private SoccerShoe shoe;
private SoccerJersey jersey;
/* ... */
}
那孩子一個:
public class Goalkeeper extends SoccerPlayer {
private GoalkeeperGlove glove;
/* ... */
}
現在一個普通的足球球員想成爲一名球員守門員。我能做什麼?顯然,以下是行不通的:
SoccerPlayerArrayOfTeamA[0] = new SoccerPlayer("Robert");
/*... new career path ...*/
SoccerPlayerArray[0] = (Goalkeeper) SoccerPlayerArray[0]
但是,這是我要說的話「我想要做」 ...
子類(Goalkeeper
)的新實例所應有的一切變量配置如舊父類的實例(SoccerPlayer
)。 (例如name
,jersey
...) 是否有OOP的方式來做,我必須手動設置每個變量,如下所示?
/*... new career path ...*/
SoccerPlayer temp = SoccerPlayerArray[0]
SoccerPlayerArray[0] = new Goalkeeper(temp.getName());
SoccerPlayerArray[0].setJersey(temp.getJersey());
如果您需要動態更改對象的類型,則您的面向對象設計是錯誤的。一個對象始終是同一個類的一個實例。它的類型不能改變。從一開始它就是一名守門員或一名球員。 – 2015-03-13 12:47:34
@Magnamag這是一個好點!它是一個複雜系統的一部分,但我會嘗試更改創建過程 – Robert 2015-03-13 13:21:53