Некоторые отличия между абстрактными классами и интерфейсами в Java:
- Описание функциональности. skillbox.ru Интерфейсы описывают только часть функциональности объекта — определённые признаки. skillbox.ru Абстрактный класс может описывать целую категорию разных объектов, а его характеристики имеют право наследовать только те объекты, которые являются частью этой категории. skillbox.ru
- Наличие полей. skillbox.ru Интерфейс описывает только поведение (методы), и у него нет полей. skillbox.ru В то же время абстрактный класс может содержать классические поля, которые будут принадлежать разным объектам. skillbox.ru
- Наследование. dzen.ru www.geeksforgeeks.org Класс может наследоваться только от одного абстрактного класса, а класс может реализовывать несколько интерфейсов. dzen.ru www.geeksforgeeks.org
- Методы с реализацией. dzen.ru Интерфейс до Java 8 не может содержать методы с реализацией, тогда как абстрактный класс может. dzen.ru С Java 8 интерфейсы могут иметь методы с реализацией (default и static методы). dzen.ru
- Модификаторы доступа. dzen.ru Методы и переменные абстрактного класса могут иметь любые модификаторы доступа (private, protected, public). dzen.ru Методы интерфейса неявно public и abstract, поэтому другие модификаторы доступа с методами интерфейса использовать нельзя. javadevblog.com
Интерфейсы предпочтительны, когда необходимо задать общий контракт для множества разных классов, а абстрактные классы — когда нужно предоставить общую функциональность и базовую реализацию для подклассов. dzen.ru