Как получить доступ к подклассам из суперкласса в Java? - PullRequest
0 голосов
/ 15 апреля 2019

У меня есть вопрос о подклассах и суперклассах. В проекте, над которым я работаю, у меня есть суперкласс под названием «Team» и некоторые подклассы под названием «TeamBlue», «TeamRed» ... Кроме того, у всех этих подклассов есть статические поля и методы.

Мой вопрос: как мне сохранить любой объект подкласса (TeamBlue или TeamRed) в объекте «Team»? если это имеет смысл.

вот пример того, чего я пытаюсь достичь:

Team team = новый BlueTeam (); <- сохранение любой цветовой команды в «командном» объекте </p>

это короткая версия кода, который у меня есть:

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 ]

2 голосов
/ 15 апреля 2019

Это не объектно-ориентированный!Почему у синей команды есть статичный список игроков?Почему это публично?Вы должны использовать метод получения и переопределить метод.

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 голос
/ 15 апреля 2019

Скорее всего, вы неправильно делаете иерархию классов.Синий - это не собственность команды, а цвет.Это означает, что вместо того, чтобы создавать подклассы Team для каждого возможного цвета, у вас должно быть свойство, называемое colour или name в команде, и присваивать этому синему или красному этому свойству экземпляр Team, представляющий синий цвет.или красная команда.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...