Выбор ответа Middle ООП и класс Object обновлено
Два default-метода с одной сигнатурой
Вопрос
Класс C implements A, B, оба интерфейса объявляют default void hello(). Что нужно сделать?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Переопределить hello() в C, при желании вызвать A.super.hello(). При конфликте двух default-методов компилятор требует явно переопределить метод в классе, иначе ошибка компиляции.
Варианты ответа
- Ничего: вызовется метод интерфейса, указанного первым
- Переопределить
hello()вC, при желании вызватьA.super.hello()правильный ответ - Ничего: вызовется метод того интерфейса, что объявлен позже
- Так нельзя: класс не может реализовать два интерфейса с одинаковыми методами
Разбор
При конфликте двух default-методов компилятор требует явно переопределить метод в классе, иначе ошибка компиляции. Внутри можно выбрать реализацию через A.super.hello(). Порядок в implements ни на что не влияет. Реализовать оба интерфейса можно, просто конфликт надо разрешить.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.