Назад к вопросам
СБЕР
Senior
4
Что произойдёт если B не extends A, а оба интерфейса независимы с одинаковым default методом?
Компании, где спрашивали
Ответ от нейросети
sobes.tech AI
Если два независимых интерфейса в Java содержат одинаковый по сигнатуре default-метод, и класс реализует оба этих интерфейса, то при компиляции возникнет ошибка из-за конфликта методов по умолчанию. Компилятор не сможет определить, какой из default-методов использовать, и потребует явного разрешения конфликта в классе, реализующем эти интерфейсы.
Чтобы исправить ситуацию, нужно в классе реализовать этот метод и явно указать, какой из интерфейсных методов использовать, например, через синтаксис InterfaceName.super.methodName():
interface A {
default void foo() {
System.out.println("A's foo");
}
}
interface B {
default void foo() {
System.out.println("B's foo");
}
}
class C implements A, B {
@Override
public void foo() {
// Явно выбираем реализацию из интерфейса A
A.super.foo();
}
}
Без такого переопределения компиляция не пройдет.