Получить доступ

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

MiddleООП
Коротко

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

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

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

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

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

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

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

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

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

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

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

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

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

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

Разбор темы

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

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем