Класс реализует два несвязанных интерфейса, в каждом из которых есть default-метод с одинаковой сигнатурой. Что произойдёт?
Ошибка компиляции: класс обязан переопределить метод. Выбрать реализацию можно явно: A.super.method().
- Правила: метод класса сильнее любого default
- Более специфичный интерфейс сильнее более общего
- Абстрактный метод в одном интерфейсе и default в другом — тоже конфликт
А ещё Язык не угадывает намерение — требует явного решения
Подробно
Так решена проблема ромбовидного наследования при добавлении default-методов: язык не угадывает намерение, а требует явного решения. Полезно знать и правила разрешения в других случаях: реализация класса всегда сильнее любого default-метода интерфейса, а более специфичный интерфейс сильнее более общего — если один из интерфейсов наследует другой, конфликта не возникает. Отсюда же принципиальное ограничение default-методов: они не могут переопределять методы класса Object, поэтому объявить в интерфейсе default-реализацию equals или toString нельзя.
Что хотят услышать
- Результат и как разрешить.
- Правила приоритета.
Частые ошибки
- Рассчитывать на порядок в implements.
- Пытаться объявить default-реализацию equals или hashCode.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✗Победит default-метод интерфейса, указанного первым в списке implements
- ✗Код скомпилируется, а конфликт разрешится в рантайме
- ✗Класс унаследует оба метода как перегрузки
- ✓Ошибка компиляции, пока класс не переопределит метод; нужный вызывают как Имя.super.method()
Что спросят дальше
- Почему реализация класса сильнее default-метода?
- Почему default-методы не могут переопределять методы Object?
Разбор темы
- Интерфейсы против абстрактных классов
Контракт против частичной реализации, default/static/private-методы, разрешение конфликта default-методов и критерий выбора.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.