Абстрактные классы могут содержать как реализованные методы с телом, так и абстрактные методы. Интерфейсы традиционно содержали только абстрактные методы. Но начиная с Java 8, интерфейсы могут включать static и default методы с реализацией.
Абстрактные классы поддерживают поля экземпляра с любым модификатором доступа. Интерфейсы ограничены только константами и не могут объявлять поля экземпляра.
Абстрактные классы могут определять конструкторы для инициализации состояния при создании экземпляров подклассов. Интерфейсы не могут иметь конструкторы, так как они не могут хранить состояние экземпляра.
Класс может наследоваться от только одного абстрактного класса из-за модели единственного наследования в Java. Однако класс может реализовывать несколько интерфейсов, что даёт больше гибкости при композиции и определении контрактов.
| Возможность | Абстрактный класс | Интерфейс |
|---|---|---|
| Реализованные методы | Да | Да (Java 8+) |
| Поля экземпляра | Да | Нет (только константы) |
| Конструктор | Да | Нет |
| Множественное наследование | Нет (только одиночное) | Да |
Начиная с Java 8, интерфейсы могут содержать методы default и static с реализацией, тогда как абстрактные классы могут содержать только абстрактные методы без тела.
Новый — ещё не проверен сообществом
Вы