Знаю, тут есть программисты. Хотелось бы услышать вашу точку зрения по следующему вопросу.

Вот есть в ООП такое понятие, как интерфейс. В нем я объявляю методы, которые будут определены в классе, который включит в себя этот интерфейс.

Собственно вопрос. Для чего нам использовать интерфейсы, если тоже самое можно реализовать в абстрактном классе?

То есть создать абстрактный класс, объявить в нем методы и определить их в классе-наследнике... Ведь у абстрактных классов есть приемущества перед интерфейсами:

- в абстрактных классах можно объявлять поля, а в интерфейсе только методы
- в классе-наследнике можно не определить какой-либо из методов, объявленных в абстрактном классе. Если попытаться такое провернуть с использованием интерфейса, то компилятор/интерпритатор будет "ругаться".

Так нафига существуют интерфейсы? Можете привести пример, когда интерфейс использовать выгоднее, чем абстрактный класс?

Комментарии (11)

westernw777 4. сентября, 2013.г.  
 0 0
Проходил мимо, и вдруг вот такой блог всплыл, думаю, ну делать нечего, программу дописал - надо ответить.

Если не конкретизировать в каком языке использовать интерфейс - он как и называется нужен что-бы служить как связующий, обычно если суб-класс использует интерфейс значит ВСЕ методы интерфейса должны быть в суб-классе. Т.е. вот ты разработал пакет для обработки какого-то типа данных, что-бы с твоим пакетом интегрировать надо знать какие есть публичные функции, имея интерфейс для всех функций какие ТОЧНО будут у того или иного класса мы можем спокойно их использовать. Когда пишется абстрактный класс, суб-класс не обязан переделать ВСЕ функции которые задекларированны в пэрэнте и если программист допустит ошибку то она может быть не замечена, а потом такая-то функция ничего не делает так-как её нет в суб-классе.

На практике интерфейсы нужны редко, но если перейти к точным примерам, в C++ можно inherit с нескольких классов и там интерфейсы не критичны. в C# переделали правила и можно иметь только одного родителя Класс остальные могут быть только интерфейсы.

Вобщем, чем больше программируешь тем лучше понимаешь когда нужен абстрактный класс а когда интерфейс очень вписывается для лучшего понимания программы
wad (56) 30. января, 2013.г.  
 0 0
Да нет же!

без сферического вакуума, для конкретных языков программирования?
Личинка Носорога (33) 30. января, 2013.г.  
 0 0
в сферическом вакууме?
Да нет же!
общую концепцию понятия интерфейса в ООП.
wad (56) 29. января, 2013.г.  
 0 0
общую концепцию понятия

в сферическом вакууме?
Личинка Носорога (33) 29. января, 2013.г.  
 0 0
c++
А никто о C++ или другом конкретном языке программирования не говорит   Я имел в виду общую концепцию понятия интерфейса в ООП.
wad (56) 29. января, 2013.г.  
 0 0
интерфейсы не нужны, их официально и нет в c++ стандарте.
osterreich (29) 29. января, 2013.г.  
 0 0
Мнение НЕ программиста: и в какой вселенной они живут...  
Тридцатый (38) 29. января, 2013.г.  
 0 0
интерфейсы можно использовать, когда не нужна иерархия (или нет возможности её использовать), или (на примере PHP) - т.к. нет множественного наследования классов, то приходится использовать интерфейсы...но на практике у меня ещё не встречались такие задачи
Ray Forest (32) 29. января, 2013.г.  
 0 0
в пхп не мало вещей которые редко используются и не несут особого смысла. Не стоит заморачиватся.
А подобные вопросы лучше задавать на спей. форумах (типо киберфорум.ру)
Личинка Носорога (33) 29. января, 2013.г.  
 0 0
подобные вещи не очень часто встречаются (по крайней мере в пхп)
Я тоже, в основном, на PHP пишу и сталкиваюсь с таким редко. Но, дело в том. что я даже теоретически не могу представить, когда у интерфейса может быть преемущество перед а.классом.
Ray Forest (32) 29. января, 2013.г.  
 0 0
Тоже задавался этим вопросом, на практике никогда не использовал интерфейсы.
Вообще задачи в которых нужно использовать подобные вещи не очень часто встречаются (по крайней мере в пхп)
Похожие записи