Абстрактные классы и интерфейсы — когда применять одно или другое?
Как по мне так эти ассоциации из реального мира только усложняют понимание ООП.
Интерфейс - это описание методов доступа к объекту.
Абстрактный класс - это выделение общих методов и свойств классов.
Интерфейс - когда нужно единообразно работать с разными объектами, имеющими одинаковое логическое назначение (репозитории сущностей, например).
Абстрактный класс - когда нужно определить некое единообразное поведение для всех производных объектов,а также различия в поведении - абстрактные методы.