Я также согласен с ответом adamalex, что интерфейсы должны совместно использоваться классами, которые должны реагировать на определенные методы.
Если классы имеют схожую функциональность, но не связаны друг с другом напрямую родственными отношениями, то интерфейс был бы хорошим способом добавить эту функцию к классам без дублирования функциональности между ними. (Или иметь несколько реализаций с небольшими различиями.)
Пока мы используем аналогию с автомобилем, конкретный пример. Допустим, у нас есть следующие классы:
Car -> Ford -> Escape -> EscapeHybrid
Car -> Toyota -> Corolla -> CorollaHybrid
Автомобили имеют wheels
и могут Drive()
и Steer()
. Таким образом, эти методы должны существовать в классе Car
. (Вероятно, класс Car
будет абстрактным классом.)
Идя вниз по строке, мы получаем различие между Ford
и Toyota
(вероятно, реализованное как разница в типе эмблемы на автомобиле, опять же, вероятно, абстрактный класс).
Затем, наконец, у нас есть классы Escape
и Corolla
, полностью реализованные в виде автомобиля.
Как мы можем создать гибридный автомобиль?
У нас может быть подкласс Escape
, то есть EscapeHybrid
, который добавляет метод FordsHybridDrive()
, и подкласс Corolla
, то есть CorollaHybrid
, с методом ToyotasHybridDrive()
. Методы в основном делают одно и то же, но у нас разные методы. Фу! Похоже, мы можем добиться большего.
Допустим, у гибрида есть метод HybridDrive()
. Поскольку мы не хотим иметь два разных типа гибридов (в идеальном мире), мы можем создать интерфейс IHybrid
с методом HybridDrive()
.
Итак, если мы хотим создать класс EscapeHybrid
или CorollaHybrid
, все, что нам нужно сделать, это реализовать интерфейс IHybrid
.
В качестве примера из реального мира давайте взглянем на Java. Класс, который может сравнивать объект с другим объектом, реализует интерфейс Comparable
. Как следует из названия, интерфейс должен быть для класса, который сопоставим, отсюда и название "Сопоставимо".
Просто ради интереса пример автомобиля используется в уроке Интерфейсы курса Учебник по Java.
person
coobird
schedule
06.11.2008