Что произойдёт если B не extends A, а оба интерфейса независимы с одинаковым default методом?

Если два независимых интерфейса в Java содержат одинаковый по сигнатуре default-метод, и класс реализует оба этих интерфейса, то при компиляции возникнет ошибка из-за конфликта методов по умолчанию.

Короткий ответ

Что ответить на собеседовании

Если два независимых интерфейса в Java содержат одинаковый по сигнатуре default-метод, и класс реализует оба этих интерфейса, то при компиляции возникнет ошибка из-за конфликта методов по умолчанию. Компилятор не сможет определить, какой из default-методов использовать, и потребует явного разрешения конфликта в классе, реализующем эти интерфейсы.

Подробный разбор

Ответ с пояснениями

Условие

Что произойдёт если B не extends A, а оба интерфейса независимы с одинаковым default методом?

Ответ

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

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

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее