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

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

Ответ

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

Основное назначение:

  • Позволяет добавлять новую функциональность в существующие интерфейсы, не ломая код всех классов, которые их уже реализуют.
  • Класс-реализатор может использовать реализацию по умолчанию, переопределить её или объявить метод как abstract (если класс сам является абстрактным).

Пример:

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() не обязан быть переопределен
}

public class Main {
    public static void main(String[] args) {
        Car car = new Car();
        car.start(); // Car started
        car.honk();  // Beep beep! (вызывается default-реализация)
    }
}

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

  • Объявляется с ключевым словом default.
  • Может вызывать другие методы того же интерфейса.
  • Не может переопределять методы класса Object (например, toString, equals).
  • Разрешает множественное наследование поведения (но не состояния), что было невозможно до Java 8.