Middle
44
questionbank

Когда следует использовать интерфейс, а когда абстрактный класс?

Получайте ответы на вопросы в реальном времени с Sobes Copilot
Ответ от нейросети sobes.tech

Используем абстрактный класс для создания базовой функциональности и общего состояния, которое могут унаследовать подклассы. Он подходит, когда есть общие методы с реализацией и методы, которые должны быть переопределены. Абстрактный класс может иметь поля и конструкторы.

java

Используем интерфейс для определения контракта, описывающего набор методов, которые должны быть реализованы классами. Он подходит для достижения множественного поведения (множественного наследования функциональности). Интерфейс не может иметь состояние (поля экземпляра, кроме констант) и конструкторы (до Java 8).

java

Сводная таблица различий:

ПризнакАбстрактный классИнтерфейс
Тип членовПоля, абстрактные и конкретные методы, конструкторыКонстанты, абстрактные методы (по умолчанию), статические и default методы (с Java 8)
Реализация методовМожет иметь методы с реализациейТолько абстрактные методы до Java 8, с Java 8 - static and default
СостояниеМожет иметь состояние (поля)Не может иметь состояние (поля экземпляра)
НаследованиеЕдиничное наследованиеМножественная реализация
Использование"является" (is-a) - базовый тип"имеет возможность" (has-a) - контракт поведения