Я также согласен с ответом 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
. Как следует из названия, интерфейс должен быть для класса, который сопоставим , отсюда и название "Comparable".
Для интереса пример автомобиля используется в уроке Interfaces Java Tutorial .