Gymterview
junior

Что такое default методы интерфейса?

default-метод интерфейса — это метод с реализацией, объявленный в интерфейсе с ключевым словом default. Класс, реализующий интерфейс, наследует эту реализацию и может, но не обязан, её переопределить. Главная причина появления — возможность добавлять новые методы в существующие интерфейсы без нарушения обратной совместимости.

Аналогия из жизни: default-метод — это инструкция по умолчанию в контракте. Если вы не написали свою, действует стандартная. Но вы вольны её заменить.

Пример
interface Example {
    int process(int a);
    default void show() {
        System.out.println("default show()");
    }
}

Ключевые правила

  • Класс может не переопределять default-метод — тогда наследуется реализация из интерфейса
  • Если класс реализует два интерфейса с одинаковым default-методом, он обязан переопределить метод самостоятельно (иначе — ошибка компиляции)
  • default-метод не может переопределить метод Object (equals, hashCode, toString)
  • default-методы позволили добавить stream(), forEach(), sort() и другие методы в существующие интерфейсы коллекций без нарушения обратной совместимости

На собеседовании: часто спрашивают, что произойдёт при конфликте default-методов из двух интерфейсов. Ответ: ошибка компиляции, класс обязан явно переопределить метод. Также упомяните, что именно default-методы сделали возможным появление Stream API.