Sobes.tech
Junior — Middle
74

В чем заключается применение дефолтных методов в интерфейсах и абстрактных классах, и как они различаются?

Answer from AI

sobes.tech AI

Дефолтные методы (default methods) в интерфейсах Java — это методы с реализацией, которые позволяют добавлять новые методы в интерфейсы без нарушения существующих реализаций. Они появились в Java 8.

Применение дефолтных методов в интерфейсах:

  • Позволяют расширять интерфейсы, не ломая код классов, которые их реализуют.
  • Обеспечивают базовую реализацию, которую можно переопределить.

Абстрактные классы могут содержать как абстрактные методы (без реализации), так и методы с реализацией. Они служат для создания базового класса с общей логикой.

Основные различия:

  • Интерфейс с дефолтными методами не может иметь состояния (полей), кроме констант.
  • Абстрактный класс может содержать поля и конструкторы.
  • Класс может реализовывать несколько интерфейсов, но наследовать только один абстрактный класс.

Пример дефолтного метода в интерфейсе:

public interface Logger {
    void log(String message);

    default void logError(String error) {
        log("ERROR: " + error);
    }
}

Здесь logError — дефолтный метод с реализацией, который можно использовать или переопределить в классах, реализующих интерфейс.