Ответ
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-методы не имеют доступа к приватным полям класса, который их реализует.