Java 8 Default Methods: улучшение интерфейсов и обратная совместимость
Java 8 ввела default методы в интерфейсах — методы с реализацией по умолчанию. Это сделано для обратной совместимости: можно добавить методы в интерфейсы (например, forEach в Collection) без нарушения существующих реализаций.
Синтаксис
public interface Vehicle {
default void print() {
System.out.println("I am a vehicle!");
}
}
Конфликт множественных default-методов
Если класс реализует два интерфейса с одинаковым default-методом, возникает неоднозначность. Два способа решения:
1. Переопределение в классе
public class Car implements Vehicle, FourWheeler {
public void print() {
System.out.println("I am a four wheeler car vehicle!");
}
}
2. Явный вызов через super
public class Car implements Vehicle, FourWheeler {
public void print() {
Vehicle.super.print();
}
}
Static default методы
Интерфейсы могут иметь static вспомогательные методы:
public interface Vehicle {
default void print() { System.out.println("I am a vehicle!"); }
static void blowHorn() { System.out.println("Blowing horn!!!"); }
}
Полный пример
public class Java8Tester {
public static void main(String[] args) {
Vehicle vehicle = new Car();
vehicle.print();
}
}
interface Vehicle {
default void print() { System.out.println("I am a vehicle!"); }
static void blowHorn() { System.out.println("Blowing horn!!!"); }
}
interface FourWheeler {
default void print() { System.out.println("I am a four wheeler!"); }
}
class Car implements Vehicle, FourWheeler {
public void print() {
Vehicle.super.print();
FourWheeler.super.print();
Vehicle.blowHorn();
System.out.println("I am a car!");
}
}
Вывод
I am a vehicle!
I am a four wheeler!
Blowing horn!!!
I am a car!
Default методы позволяют эволюционировать API без ломания существующего кода.
java
- Освоение операторов Java: типы, синтаксис и практические примеры
- Комментарии в Java: типы, использование и лучшие практики
- Освоение улучшенного цикла for в Java: синтаксис, примеры и лучшие практики
- Освоение строк в Java: создание, методы и лучшие практики
- Абстрактные классы и методы в Java: полное руководство
- Интерфейсы в Java: концепции, реализация и лучшие практики
- Анонимные внутренние классы в Java: определение, синтаксис и практические примеры
- Try-with-resources в Java: автоматическое управление ресурсами
- Аннотации в Java: типы, размещение и практические примеры
- Assertions в Java: практическое руководство по обнаружению багов и обеспечению надежности кода