Поскольку основной вопрос этого вопроса касается полиморфизма, я постараюсь дать хороший совет по этому вопросу. (Я имею в виду попробовать).
Когда один класс расширяется от другого, вы говорите, что classA - это classB. В этом случае я не верю, что хоккейная команда - хоккеист. Полиморфизм можно использовать, используя абстрактные классы и используя команды, выходящие из них, такие как Spokane Chiefs, выходящие из хоккейной команды и переопределяющие их методы. SpokaneCheifs будет их собственным классом, в вашем случае вы создаете каждую команду во время выполнения.
Если вы хотите, чтобы две команды имели связь друг с другом во время «боев», вы можете использовать метод боя в объект HockeyTeam, такой как teamA.fight (teamB). Таким образом, teamA получит доступ к teamB, чтобы «сражаться» с их публичными c добытчиками / сеттерами, я не уверен, как вы хотите, чтобы они сражались, это обычное использование RNG для определения победителя и любых убытков.
Также мне нравится, как вы использовали DV C, но если вы не знаете, будет случай, когда вы будете использовать плеер с пустым именем или создадите его во время выполнения с помощью сеттеров; Лучше удалить его и использовать свои EVC. Если у вас есть конструктор явных значений, Java не создаст конструктор значений по умолчанию, если вы не укажете для него.