Знаю, тут есть программисты. Хотелось бы услышать вашу точку зрения по следующему вопросу.
Вот есть в ООП такое понятие, как интерфейс. В нем я объявляю методы, которые будут определены в классе, который включит в себя этот интерфейс.
Собственно вопрос. Для чего нам использовать интерфейсы, если тоже самое можно реализовать в абстрактном классе?
То есть создать абстрактный класс, объявить в нем методы и определить их в классе-наследнике... Ведь у абстрактных классов есть приемущества перед интерфейсами:
- в абстрактных классах можно объявлять поля, а в интерфейсе только методы
- в классе-наследнике можно не определить какой-либо из методов, объявленных в абстрактном классе. Если попытаться такое провернуть с использованием интерфейса, то компилятор/интерпритатор будет "ругаться".
Так нафига существуют интерфейсы? Можете привести пример, когда интерфейс использовать выгоднее, чем абстрактный класс?
Комментарии (11)
Похожие записи
-
-
-
-
-
-
-
-
-
Чужие против Хищника: Реквием / Aliens vs Predator: Requiem (DVDrip)
darkcinema 1537 3 17. февраля, 2008.г.
Если не конкретизировать в каком языке использовать интерфейс - он как и называется нужен что-бы служить как связующий, обычно если суб-класс использует интерфейс значит ВСЕ методы интерфейса должны быть в суб-классе. Т.е. вот ты разработал пакет для обработки какого-то типа данных, что-бы с твоим пакетом интегрировать надо знать какие есть публичные функции, имея интерфейс для всех функций какие ТОЧНО будут у того или иного класса мы можем спокойно их использовать. Когда пишется абстрактный класс, суб-класс не обязан переделать ВСЕ функции которые задекларированны в пэрэнте и если программист допустит ошибку то она может быть не замечена, а потом такая-то функция ничего не делает так-как её нет в суб-классе.
На практике интерфейсы нужны редко, но если перейти к точным примерам, в C++ можно inherit с нескольких классов и там интерфейсы не критичны. в C# переделали правила и можно иметь только одного родителя Класс остальные могут быть только интерфейсы.
Вобщем, чем больше программируешь тем лучше понимаешь когда нужен абстрактный класс а когда интерфейс очень вписывается для лучшего понимания программы
без сферического вакуума, для конкретных языков программирования?
в сферическом вакууме?
А подобные вопросы лучше задавать на спей. форумах (типо киберфорум.ру)
Вообще задачи в которых нужно использовать подобные вещи не очень часто встречаются (по крайней мере в пхп)