Sobes.tech
Senior

¿Qué sucederá si B no extiende A, y ambos interfaces son independientes con el mismo método predeterminado?

sobes.tech AI

Respuesta de la IA

Если два независимых интерфейса в 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();
    }
}

Без такого переопределения компиляция не пройдет.