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