我有一個關于子類和超類的問題。在我正在處理的一個項目中,我有一個名為“Team”的超類和一些名為“TeamBlue”、“TeamRed”的子類……而且,所有這些子類中都有靜態字段和方法。我的問題是:如何將任何子類對象(TeamBlue 或 TeamRed)存儲到“團隊”對象中?如果這是有道理的。這是我想要實現的一個例子:Team team = new BlueTeam(); <-- 將任何顏色團隊存儲到“團隊”對象中這是我擁有的代碼的簡短版本:class Team { //empty class used for binding all the team classes}class BlueTeam extends Team { public static List<String> players = new ArrayList<String>();}class PlayerData { Team playerTeam; public PlayerData(Team tm){ playerTeam = tm; } playerTeam.players // I want to access any subclass that is stored into this "myTeam" object and access its players list}class createData { List<PlayerData> data = new ArrayList<PlayerData>(); // this is what I've tried but I get a null exception Team team = new BlueTeam(); data.add(new PlayerData(team));}
2 回答
小怪獸愛吃肉
TA貢獻1852條經驗 獲得超1個贊
這不是面向對象的!為什么藍隊有一個靜態的球員名單?為什么是公開的?您應該使用 getter 并覆蓋該方法。
abstract class Team {
// if there is a sensible default return then use it and the class needn't be abstract
abstract List<String> getPlayers();
}
class BlueTeam extends Team {
private final List<String> players = new ArrayList<>();
@Override
List<String> getPlayers() {
return players;
}
}
用法:
Team team = new BlueTeam();
List<String> bluePlayers = team.getPlayers();
慕容森
TA貢獻1853條經驗 獲得超18個贊
你很可能做錯了類層次結構。藍色不是團隊的屬性,顏色才是。這意味著Team您應該在 Team 中擁有一個名為colourorname的屬性,并在代表藍色或紅色團隊的 Team 實例中為該屬性分配“藍色”或“紅色”,而不是為每種可能的顏色進行子類化。
添加回答
舉報
0/150
提交
取消
