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

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

Ответ

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

Основная цель: Решение проблемы "ломких интерфейсов". Позволяет добавлять новую функциональность в интерфейсы, не заставляя все классы-реализации предоставлять свою реализацию этого метода.

Пример:

interface Vehicle {
    // Абстрактный метод (должен быть реализован)
    void start();

    // Default-метод (реализация по умолчанию)
    default void honk() {
        System.out.println("Beep beep!");
    }
}

class Car implements Vehicle {
    @Override
    public void start() {
        System.out.println("Car started");
    }
    // Метод honk() не обязан быть переопределен, используется реализация по умолчанию.
}

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

  • Объявляется с модификатором default.
  • Имеет тело реализации.
  • Класс, реализующий интерфейс, может, но не обязан переопределять default-метод.
  • Если класс реализует несколько интерфейсов с одинаковыми default-методами, он обязан переопределить этот метод, чтобы разрешить конфликт.
  • Default-методы имеют доступ к другим методам интерфейса (в том числе private).

Практическое применение:

  • Добавление новых методов в коллекции Java (например, stream(), forEach() в интерфейсе Iterable).
  • Создание удобных методов-хелперов непосредственно в интерфейсе.