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

我有一个关于子类和超类的问题。在我正在处理的一个项目中,我有一个名为“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));

}


RISEBY
浏览 111回答 2
2回答

小怪兽爱吃肉

这不是面向对象的!为什么蓝队有一个静态的球员名单?为什么是公开的?您应该使用 getter 并覆盖该方法。abstract class Team {&nbsp; &nbsp; // if there is a sensible default return then use it and the class needn't be abstract&nbsp; &nbsp; abstract List<String> getPlayers();&nbsp;}class BlueTeam extends Team {&nbsp; &nbsp; private final List<String> players = new ArrayList<>();&nbsp; &nbsp; @Override&nbsp; &nbsp; List<String> getPlayers() {&nbsp; &nbsp; &nbsp; &nbsp; return players;&nbsp; &nbsp; }}用法:Team team = new BlueTeam();List<String> bluePlayers = team.getPlayers();

慕容森

你很可能做错了类层次结构。蓝色不是团队的属性,颜色才是。这意味着Team您应该在 Team 中拥有一个名为colourorname的属性,并在代表蓝色或红色团队的 Team 实例中为该属性分配“蓝色”或“红色”,而不是为每种可能的颜色进行子类化。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java