Каждый (абстрактный класс и интерфейс) предлагает свой набор преимуществ и недостатков. В то время как Рассел прав, предлагая композиция вместо наследования , использование шаблонов предполагает программу для интерфейса, а не реализацию (Head First Design Patterns).
Абстрактный класс предлагает массу гибкости, где вы можете реализовать методы , так сказать, , реализовать реализацию и т. Д. Оба интерфейса предлагают полиморфизм, если это вызывает озабоченность. Но абстрактные классы занимают базовую ячейку наследования.