Java предоставляет и поддерживает создание как абстрактных классов, так и интерфейсов. Обе реализации имеют некоторые общие характеристики, но отличаются следующими особенностями:
- Все методы в интерфейсе неявно абстрактны. С другой стороны, абстрактный класс может содержать как абстрактные, так и неабстрактные методы.
- Класс может реализовывать несколько интерфейсов, но расширять только один абстрактный класс.
- Чтобы класс реализовал интерфейс, он должен реализовать все объявленные методы. Однако класс не может реализовывать все объявленные методы абстрактного класса. Однако в этом случае подкласс также должен быть объявлен как абстрактный.
- Абстрактные классы могут реализовывать интерфейсы, даже не обеспечивая реализацию методов интерфейса.
- Переменные, объявленные в интерфейсе Java, по умолчанию являются окончательными. Абстрактный класс может содержать нефинальные переменные.
- По умолчанию члены интерфейса Java являются общедоступными. Член абстрактного класса может быть частным, защищенным или открытым.
- Интерфейс абсолютно абстрактен и не может быть создан. Абстрактный класс также не может быть создан, но может быть вызван, если он содержит основной метод.
Также ознакомьтесь с различиями абстрактного класса и интерфейса для JDK 8.
Итог
Ключевой вывод для интервью: в чем разница между интерфейсом и абстрактным классом?