Андрей
Высший разум
(466259)
7 месяцев назад
Абстрактный класс в обязательном порядке создаёт иерархию наследования.
Интерфейс требует, чтобы класс, реализующий интерфейс, содержал реализации всех методов, определённых этим интерфейсом. Но никакого наследования при этом не создаётся: один и тот же интерфейс могут реализовывать никак не связанные между собой классы.
Длинные цепочки наследования (а, тем более, множественного наследования) приводят к написанию очень хрупкого кода: когда какая-то мелкая правка в коде класса-предка может непредсказуемым образом поломать работу классов-потомков. И интерфейсы, позволяющие реализовывать полиморфизм вообще без наследования, являются способом написания более надёжного, по сравнению с наследованием, кода.
P.S. Первое, что сделали разработчики ООП-языков на базе опыта использования С++ - урезали в новых языках наследование до предельно примитивного линейного и добавили интерфейсы.