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