我对子类和超类有疑问。在我正在研究的项目中,我有一个名为“ Team”的超类,还有一些名为“ TeamBlue”,“ TeamRed”的子类。此外,所有这些子类中都包含静态字段和方法。
我的问题是:如何将任何子类对象(TeamBlue或TeamRed)存储到“ Team”对象中?如果有道理。
这是我要实现的目标的一个示例:
团队=新的BlueTeam(); <-将任何颜色团队存储到一个“团队”对象中
这是我的代码的简短版本:
POST https://firebasedynamiclinks.googleapis.com/v1/shortLinks?key=api_key
Content-Type: application/json
{
"longDynamicLink": "https://example.page.link/?link=https://www.example.com/&apn=com.example.android&ibi=com.example.ios"
}
答案 0 :(得分:2)
这不是面向对象的!为什么蓝队有一个静态的球员名单?为什么公开?您应该使用吸气剂并覆盖该方法。
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();
答案 1 :(得分:1)
您很可能在做类层次结构错误。蓝色不是团队的属性,颜色是团队的属性。意味着您应该在团队中拥有一个名为Team
或colour
的属性,并在实例中为该属性分配“ blue”或“ red”,而不是为每种可能的颜色对name
进行子类化。代表蓝色或红色团队的团队。