Методы по умолчанию в интерфейсах Java 8 обеспечивают обратную совместимость при развитии существующих интерфейсов без нарушения их реализаций.
Когда тебе нужно добавить новую функциональность к интерфейсу, у которого уже есть несколько реализаций, ты сталкиваешься с серьёзной проблемой:
Представь интерфейс Car, реализуемый тремя классами:
Car interface
├── BMW
├── Chevrolet
└── Toyota
Если ты добавишь новый абстрактный метод fly() в Car, все три класса должны его реализовать — даже если летать они не умеют. Это сломает существующий код.
Предоставляя реализацию по умолчанию прямо в интерфейсе, ты можешь:
interface Car {
void drive();
// Реализация по умолчанию — обратно совместимо
default void fly() {
System.out.println("This car cannot fly");
}
}
Теперь BMW, Chevrolet и Toyota продолжают работать без изменений, а любой новый класс автомобиля может переопределить fly(), если поддерживает полёты.
Методы по умолчанию обеспечивают безопасную эволюцию интерфейсов — ты можешь добавлять функциональность к интерфейсам, сохраняя полную обратную совместимость с существующими реализациями.
Default методы в Java 8 интерфейсах позволяют тебе добавлять новые методы без необходимости заставлять все существующие реализующие классы предоставлять реализации.
Новый — ещё не проверен сообществом
Вы