Интерфейс определяет контракт для классов, указывая набор методов, которые должны быть реализованы. Может содержать только сигнатуры методов (до Java 8) и константы. Множественное наследование интерфейсов разрешено.
Абстрактный класс может содержать абстрактные и конкретные методы, поля и конструкторы. Не может быть инстанцирован напрямую. МожетD иметь только одного непосредственного родителя (ограничение на множественное наследование классов).
Основные отличия:
| Характеристика | Интерфейс | Абстрактный класс |
|---|---|---|
| Множественное наследование | Да (для имплементации) | Нет (для расширения) |
| Методы | Только абстрактные (до Java 8), могут быть default и static (с Java 8) | Абстрактные и конкретные |
| Поля | Cтатические и финальные константы | Любые (static, final, primitive, reference) |
| Конструкторы | Нет | Есть |
| Реализация | Реализуется (implements) | Расширяется (extends) |