Вопрос с собеседования · Java

Класс реализует два несвязанных интерфейса, в каждом из которых есть default-метод с одинаковой сигнатурой. Что произойдёт?

MiddleООП
Коротко

Ошибка компиляции: класс обязан переопределить метод. Выбрать реализацию можно явно: A.super.method().

  • Правила: метод класса сильнее любого default
  • Более специфичный интерфейс сильнее более общего
  • Абстрактный метод в одном интерфейсе и default в другом — тоже конфликт

А ещё Язык не угадывает намерение — требует явного решения

Подробно

Так решена проблема ромбовидного наследования при добавлении default-методов: язык не угадывает намерение, а требует явного решения. Полезно знать и правила разрешения в других случаях: реализация класса всегда сильнее любого default-метода интерфейса, а более специфичный интерфейс сильнее более общего — если один из интерфейсов наследует другой, конфликта не возникает. Отсюда же принципиальное ограничение default-методов: они не могут переопределять методы класса Object, поэтому объявить в интерфейсе default-реализацию equals или toString нельзя.

Что хотят услышать

  • Результат и как разрешить.
  • Правила приоритета.

Частые ошибки

  • Рассчитывать на порядок в implements.
  • Пытаться объявить default-реализацию equals или hashCode.

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✗Победит default-метод интерфейса, указанного первым в списке implements
  • ✗Код скомпилируется, а конфликт разрешится в рантайме
  • ✗Класс унаследует оба метода как перегрузки
  • ✓Ошибка компиляции, пока класс не переопределит метод; нужный вызывают как Имя.super.method()

Что спросят дальше

  • Почему реализация класса сильнее default-метода?
  • Почему default-методы не могут переопределять методы Object?

Разбор темы

Связанные вопросы

Партнёр платформы

Разбор собеседования с sotto

После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.

Разбор собеседования