我有一个关于子类和超类的问题。在我正在处理的一个项目中,我有一个名为“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 中拥有一个名为colour
orname
的属性,并在代表蓝色或红色团队的 Team 实例中为该属性分配“蓝色”或“红色”,而不是为每种可能的颜色进行子类化。
添加回答
举报
0/150
提交
取消