Ответ
Default-метод (метод по умолчанию) — это метод в интерфейсе, который имеет собственную реализацию. Эта функциональность была добавлена в Java 8 для эволюции интерфейсов без нарушения обратной совместимости: можно добавлять новые методы в существующие интерфейсы, не заставляя все реализующие классы их немедленно переопределять.
Ключевые характеристики:
- Объявляется с ключевым словом
default. - Имеет тело с реализацией прямо в интерфейсе.
- Класс, реализующий интерфейс, может, но не обязан переопределять этот метод.
Пример:
interface Vehicle {
// Абстрактный метод (без реализации)
void honk();
// Default-метод (с реализацией по умолчанию)
default void start() {
System.out.println("Vehicle is starting...");
performSystemCheck(); // default-метод может вызывать private-метод интерфейса
}
// Static-метод в интерфейсе (также с Java 8)
static boolean isVehicle(Object obj) {
return obj instanceof Vehicle;
}
// Private-метод (помощник для default-метода, с Java 9)
private void performSystemCheck() {
System.out.println("System check passed.");
}
}
class Car implements Vehicle {
@Override
public void honk() {
System.out.println("Beep beep!");
}
// Метод start() не переопределен, будет использована реализация по умолчанию
}
public class Main {
public static void main(String[] args) {
Car car = new Car();
car.start(); // Вывод: "Vehicle is starting..." "System check passed."
car.honk(); // Вывод: "Beep beep!"
System.out.println(Vehicle.isVehicle(car)); // Вывод: true
}
}
Варианты поведения класса:
- Наследовать реализацию по умолчанию (как в примере выше).
- Переопределить default-метод, предоставив свою специфичную реализацию.
- Повторно объявить метод абстрактным в абстрактном классе-посреднике, переложив обязанность по реализации на следующие конкретные классы.