Вызов метода в подклассе с доступом к его суперклассу

1

Я делаю футбольную игру для Android.

У меня есть класс Player. Игрок распространяется на DefencivePlayer и OffensivePlayer. Каждый из этих классов имеет сенсорное событие, и все они уникальны. У меня есть другой класс, движитель, который обрабатывает касания, имеющие доступ к Player. (как видно ниже)

Изображение 174551

Игрок всегда либо DefencivePlayer, либо OffensivePlayer. Я бы хотел, чтобы функциональность была способна обрабатывать штрихи, просто вызвав Player.touch и, в зависимости от того, какой именно метод касания будет вызван в DefencivePlayer или OffensivePlayer.

Я считаю, что мой дизайн с двумя классами расширяет класс Player неправильно, потому что он не гарантирует наличие подклассов.

Пожалуйста, помогите, я действительно пытаюсь получить хороший дизайн здесь и не хочу ничего взломать.

  • 0
    У меня были проблемы с колебаниями. Функциональность, которую я хотел, состояла именно в том, как бы повела себя моя программа, если бы я ее протестировал. Я предполагал, что методы в подклассах будут игнорироваться, поскольку они не должны существовать. Спасибо за все очень быстрые ответы
Теги:
oop
design-patterns

3 ответа

2
Лучший ответ

Я сделал быстрый тест - используя диаграмму классов, я создал три класса игроков и создал общий список ArrayList<Player> для Нападающих и Оборонительных игроков. Распечатайте результаты этого кода:

players.add(new OffensivePlayer());
players.add(new DefensivePlayer());
players.add(new OffensivePlayer());
players.add(new OffensivePlayer());
players.add(new DefensivePlayer());

for(Player p: players)
    p.touch();

дал мне этот результат:

Touched offensive player.
Touched defensive player.
Touched offensive player.
Touched offensive player.
Touched defensive player.

Другими словами, различные типы игроков были интерпретированы как подклассы, а не только как экземпляр Player.

С точки зрения дизайна было бы целесообразно сделать Player абстрактным классом, тем самым гарантируя, что не создаются объекты простого Player, поэтому метод touch() будет выполняться только из экземпляра подкласса Player.

0

Вы можете сделать Player.Touch() abstract. Это обеспечит, чтобы подклассы предоставили свою собственную реализацию.

0

Я не уверен, правильно ли понимаю ваш вопрос, но, похоже, в вашей текущей настройке нет ничего плохого.

Пока метод Touch() является abstract (что делает Player объявленным как abstract class Player), или Player определяется как interface Player, вы сможете использовать player.Touch() и убедиться, что вызванный метод вызван.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню