§ Предпочитайте интерфейсы абстрактным классам
Имеющийся класс несложно подогнать под имеющийся интерфейс. В отличие от абстрактного класса. Интерфейсы идеально подходят для создания дополнений (mixin). Интерфейсы позволяют создавать структуры типов без иерархии.
Интерфейсы позволяют безопасно и сильно наращивать функциональность при помощи wrapper классов. Вы можете объединить преимущества интерфейсов и абстрактных классов, сопроводив каждый предоставляемый вами нетривиальный интерфейс абстрактным классом со скелетом реализации. Интерфейс будет определять тип, а вся работа по его воплощению ляжет на скелет реализации. –По соглашению скелеты реализации называются AbstractInterface. Например: AbstractCollection, AbstractSet, AbstractList
Static фабрика, содержащая реализацию List
Эмуляция множественного наследования через поля класса.
SimpleImplementation – аналог skeleton. Миниммально работающая реализация. (AbstractMap.SimpleEntry() )
Абстрактный класс совершенствовать гораздо легче, чем интерфейс. Когда интерфейс опубликован, и множество классов его реализует, почти невозможно его безболезненно изменить.