Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Чем отличается интерфейс от абстрактного класса? И поч в С++ интерфейсы только недавно появились?

имя фамилия Ученик (95), открыт 4 недели назад
2 ответа
Def Просветленный (44758) 4 недели назад
1) Тем, что абстрактный класс может содержать реализацию некоторых методов.

2) Потому что c++ основан на парадигме полиморфизма через наследование, а не на интерфейсном полиморфизме.
Андрей Высший разум (434785) 4 недели назад
Абстрактный класс в обязательном порядке создаёт иерархию наследования.

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

Длинные цепочки наследования (а, тем более, множественного наследования) приводят к написанию очень хрупкого кода: когда какая-то мелкая правка в коде класса-предка может непредсказуемым образом поломать работу классов-потомков. И интерфейсы, позволяющие реализовывать полиморфизм вообще без наследования, являются способом написания более надёжного, по сравнению с наследованием, кода.

P.S. Первое, что сделали разработчики ООП-языков на базе опыта использования С++ - урезали в новых языках наследование до предельно примитивного линейного и добавили интерфейсы.
Похожие вопросы