Выбор ответа Middle ООП и класс Object обновлено

Два default-метода с одной сигнатурой

Вопрос

Класс C implements A, B, оба интерфейса объявляют default void hello(). Что нужно сделать?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Переопределить hello() в C, при желании вызвать A.super.hello(). При конфликте двух default-методов компилятор требует явно переопределить метод в классе, иначе ошибка компиляции.

Варианты ответа

  1. Ничего: вызовется метод интерфейса, указанного первым
  2. Переопределить hello() в C, при желании вызвать A.super.hello()правильный ответ
  3. Ничего: вызовется метод того интерфейса, что объявлен позже
  4. Так нельзя: класс не может реализовать два интерфейса с одинаковыми методами

Разбор

При конфликте двух default-методов компилятор требует явно переопределить метод в классе, иначе ошибка компиляции. Внутри можно выбрать реализацию через A.super.hello(). Порядок в implements ни на что не влияет. Реализовать оба интерфейса можно, просто конфликт надо разрешить.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.