Для чего нужны default-методы в интерфейсах Java?

«Для чего нужны default-методы в интерфейсах Java?» — вопрос из категории Java Core, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Default-методы (методы по умолчанию) позволяют добавлять новую функциональность в интерфейсы, не нарушая обратную совместимость с существующими классами, которые их реализуют.

Основная цель: Эволюция интерфейсов без "поломки" старого кода. До Java 8 добавление любого метода в интерфейс требовало его реализации во всех классах-наследниках.

Пример:

interface Vehicle {
    // Абстрактный метод
    String getModel();

    // Default-метод с реализацией
    default void startEngine() {
        System.out.println("Engine started");
    }
}

class Car implements Vehicle {
    @Override
    public String getModel() { return "Sedan"; }
    // Метод startEngine() не нужно переопределять
}

Ключевые особенности:

  • Реализуются с ключевым словом default
  • Могут быть переопределены в классах-реализациях
  • Позволяют реализовать множественное наследование поведения (но не состояния)
  • Помогают избежать дублирования кода в классах, реализующих один интерфейс

Важное ограничение: Default-методы не имеют доступа к приватным полям класса, который их реализует.