Нет, это невозможно создать класс, который реализует два интерфейса с методами по умолчанию, которые имеют одинаковое имя и сигнатуру. Это приведёт к ошибке компиляции.
Когда класс реализует несколько интерфейсов, содержащих одинаково названные методы по умолчанию, компилятор не может определить, какую реализацию по умолчанию использовать. Это создаёт проблему неоднозначности, которую Java не может разрешить автоматически.
interface InterfaceA {
default void display() {
System.out.println("Interface A");
}
}
interface InterfaceB {
default void display() {
System.out.println("Interface B");
}
}
class MyClass implements InterfaceA, InterfaceB {
// Ошибка компиляции: конфликтующие методы по умолчанию
}
У тебя есть два варианта:
class MyClass implements InterfaceA, InterfaceB {
@Override
public void display() {
// Предоставь явную реализацию
InterfaceA.super.display();
}
}
Явно переопределив конфликтующий метод, ты устраняешь неоднозначность и даёшь компилятору чёткое указание на то, какое поведение использовать.
Класс, реализующий два интерфейса с методами default с одинаковыми названиями, вызовет ошибку времени компиляции из-за неоднозначности, которую невозможно разрешить автоматически.
Новый — ещё не проверен сообществом
Вы