Некоторые преимущества использования наследования от интерфейсов вместо абстрактных классов:
- Гибкость. 1 Интерфейсы позволяют реализовывать несколько интерфейсов и создавать иерархии интерфейсов, что обеспечивает большую гибкость по сравнению с абстрактными классами, которые поддерживают только одиночное наследование. 1
- Возможность подмены объектов. 2 Один и тот же интерфейс могут реализовывать различные классы, и у каждого может быть своё поведение. 2 Это позволяет гибко подменять одни объекты на другие прямо в процессе исполнения программы, меняя поведение объекта скрытно от всех классов, которые его используют. 2
- Определение общего поведения. 2 Интерфейсы предназначены для определения общего поведения, которое может быть реализовано разными классами без жёсткой связи с иерархией классов. 2
- Определение контракта. 1 Интерфейс определяет контракт, которому должны следовать классы, реализующие его, указывая, что класс может делать, не наказывая, как он должен это делать. 1
Выбор между интерфейсом и абстрактным классом зависит от того, чего нужно достичь: интерфейс лучше использовать для указания на поведение, которое должны реализовывать классы, а абстрактный класс — для создания общей функциональности с возможностью частичной реализации. 2