В чём разница между интерфейсом и абстрактным классом в Java?

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

Короткий ответ

Что ответить на собеседовании

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

Подробный разбор

Ответ с пояснениями

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

Интерфейс может содержать default, static и private-методы, но не обычные поля состояния экземпляра. Абстрактный класс имеет конструкторы, поля и методы разных уровней доступа, включая абстрактные. Самостоятельно создать его экземпляр нельзя. Выбирайте интерфейс для роли и взаимозаменяемости, абстрактный класс — когда нужна осмысленная общая база. Наличие кода в интерфейсе не делает эти механизмы одинаковыми.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее