为了账号安全,请及时绑定邮箱和手机立即绑定

如何从 Java 中的超类访问子类?

如何从 Java 中的超类访问子类?

RISEBY 2022-10-07 19:30:01
我有一个关于子类和超类的问题。在我正在处理的一个项目中,我有一个名为“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();


查看完整回答
反对 回复 2022-10-07
?
慕容森

TA贡献1853条经验 获得超18个赞

你很可能做错了类层次结构。蓝色不是团队的属性,颜色才是。这意味着Team您应该在 Team 中拥有一个名为colourorname的属性,并在代表蓝色或红色团队的 Team 实例中为该属性分配“蓝色”或“红色”,而不是为每种可能的颜色进行子类化。



查看完整回答
反对 回复 2022-10-07
  • 2 回答
  • 0 关注
  • 110 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信