Есть ли смысл реализовывать интерфейс абстрактным классом?
У нас есть интерфейс, мы реализуем его по умолчанию в абстрактном классе т. е. пишем его дефолтную реализацию (при этом добавляем новые функции, и реализуем "старые")
Зачем абстрактный класс? : это дефолтная реализация интерфейса, которая чаще всего используется.
Зачем интерфейс? У нас могут быть прямые классы-реализации интерфейса, в которых не должно быть тех функций которые добавленные в абстрактном классе.
Попытался максимально подробно описать вопрос)
Я это понимаю так:
Интерфейс - это публичный контракт. Информация для посторонних, для тех кто будет с классом взаимодействовать.
Абстрактный класс - это внутренняя кухня, прототип для реализации.
То есть одно другому никак не противоречит. Даже если абстрактный класс и интерфейс будут сильно похожи.