Интерфейс использует как это - PullRequest
1 голос
/ 08 января 2011

Если в интерфейсах есть пустые методы (неявный абстрактный метод), то в чем его применение? Почему мы говорим, что это уменьшает код и обеспечивает возможность повторного использования? Дайте мне реальный пример использования интерфейса, который показывает разницу между абстрактным классом и интерфейсом.

Ответы [ 4 ]

4 голосов
/ 08 января 2011

Интерфейс больше похож на контракт.Это не обеспечивает повторное использование реализации как таковое.Что фактически делает ваш код отделенным от реализации.Наличие абстрактного класса со ВСЕМИ абстрактными методами обеспечивает такое же преимущество (если мы игнорируем проблему множественного наследования).

Для действительно хорошего примера посмотрите на Коллекции Java и как вещи слабо связаны, используя интерфейсы дляКоллекция, карта и списки.

2 голосов
/ 08 января 2011

Из-за используемой вами терминологии я предполагаю, что вы говорите о Java.

Интерфейс полезен вместо абстрактного класса, поскольку класс может наследовать только от одного класса, но может реализовывать несколько интерфейсов.

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

Это учитывает полиморфизм и повторное использование кода.Например, (относительно Java) вы можете взять интерфейс List.Вы можете написать код, который взаимодействует с объектом List, если вам не нужна реализация List.Ваш код может быть использован с LinkedList или ArrayList или любым другим типом списка, с которым он может иметь дело, и он должен быть в состоянии управлять достаточно хорошо.Теперь вы можете написать код, который имеет определенные ожидания благодаря этому List интерфейсу, и через 15 лет кто-то может использовать новейшие технологии для создания собственной реализации List, и ваш код сможет использовать его.

1 голос
/ 08 января 2011

Абстрактный класс позволяет вам описывать поля и неабстрактные методы. Это не ограничивает вас простым описанием интерфейса, оно подразумевает некоторую логику. Интерфейс, с другой стороны, делает то, что говорит, и не имеет ничего общего с логикой. Со стороны клиентского кода вы не беспокоитесь о реализации и о том, как все работает. Это позволяет обмениваться одной реализацией интерфейса с другой без дополнительного кода.

На стороне кода реализации интерфейс позволяет выполнять множественное «наследование».

1 голос
/ 08 января 2011

Мне нравится называть эти типы функций "подразумеваемой документацией по коду". Использование интерфейса может передать много информации другим разработчикам, которые будут работать над вашим проектом, и эта информация поможет предотвратить множество головных болей.

Например, если класс реализует интерфейс, который имеет 2 метода, и я новичок в проекте, это может сказать мне, что разработчик, который написал эти методы, не хочет, чтобы сигнатура метода изменилась.

Подумайте о классе Dog и классе Cat, которые оба реализуют интерфейс Sociable, где есть методы walk (int speed), sit (), layDown (), bite (int Степень).

Если у нас есть класс Dog и класс Cat, которые реализуют эти методы, и у них есть зависимости, изменение сигнатуры метода одного из них может иметь некоторые отрицательные последствия.

Интерфейсы - это способ помочь описать класс. В этом примере у Общительной Собаки и Общительной Кошки много общего.

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

Наконец, хотя класс может создавать подкласс только одного класса, он может реализовывать несколько интерфейсов. Таким образом, преимущество использования интерфейса состоит в том, что у меня может быть Dog, который реализует Big and Sociable, и Cat, который реализует Small и Sociable.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...