В чем преимущество использования оружия в качестве интерфейса над классом Abstract

1

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

Проблема: Воины сражаются с оружием в поле битвы.

Принимая ситуацию в изображении,

скажем, у нас есть классный воин, который реализует Оружие.

Оружие может распространяться на меч, пистолет и т.д.

У меня есть путаница, будь то Оружие должно быть интерфейсом или абстрактным классом.

Если это должен быть интерфейс, то какое преимущество над ним.

[Редактировать]

Если это интерфейс, я считаю, что реализация будет такой.

Weapon myWeapon;
myWeapon = new Sword();
  • 0
    Почему myWarrior будет мечом? Воины в целом не мечи.
  • 0
    Этот тип вопроса намного лучше для codereview.stackexchange.com
Показать ещё 7 комментариев
Теги:
oop

2 ответа

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

Итак, сначала - Воин не должен выполнять Оружие определенно.

Реализация интерфейса или расширение класса представляет собой взаимосвязь. Оружие - это Оружие, но Воин - нет. Он просто использует Оружие, которое представляет собой композицию - отношения HAS A.

Оружие, вероятно, должно быть интерфейсом

Интерфейс - это то, что говорит, что можно сделать с объектом класса, реализующего этот интерфейс. Он не говорит, как это достигается. Это разделение полезно для вашего чистого дизайна.

Если существует какое-либо общее поведение, которое разделяет все оружие или некоторые из них, вы можете ввести абстрактный класс, который в иерархии может стоять между интерфейсом и конкретной реализацией. Обратите внимание на это (это распространенная ошибка), что поведение не означает добавление нового метода. Поэтому, если вы, например, думаете, что пушка может быть перезагружена, поэтому для нее нужен другой метод, абстрактный класс здесь не поможет. В этом случае вы можете ввести другой интерфейс, например, Reloadable и сделать Gun орудием как Weapon, так и Reloadable. Общее поведение происходит только тогда, когда некоторые конкретные классы реализуют некоторый метод интерфейса одинаковым или похожим образом. Тогда абстрактный класс может реализовать этот один метод, но остальное не будет реализовано.

2

Кроме того, что воин не является оружием, а использует оружие... ;-)

  • Используйте абстрактный класс, если у вас есть общий код, который вы хотите, чтобы все ваше оружие имело. Например, метод разбить оружие, если он часто используется.
  • Интерфейс - это только шаблон, так сказать. и не может сама реализовать , (См. Комментарий ниже: Реализация по умолчанию).
  • Также класс может иметь несколько интерфейсов, но на Java нет наследования алмазов, поэтому у вас есть только один базовый класс.
  • 0
    @ChiefTwoPencils: Только что видел ... Я исправил это. Теперь понятно, как я это имею в виду?
  • 1
    Это то, что я имел в виду. , Не уверен, что мы на одной странице?
Показать ещё 4 комментария

Ещё вопросы

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