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

Ради чего в Java 8 добавили default-методы интерфейсов?

MiddleООП
Коротко

Эволюция API без слома совместимости: добавление метода в интерфейс раньше ломало все реализации, а Collection и Iterable реализованы в бесчисленных библиотеках. Без default не появились бы stream() и forEach().

  • Это не способ получить множественное наследование состояния
  • Default-метод не может переопределить equals, hashCode, toString
  • Риск: default-реализация может не подходить конкретному классу (removeIf у синхронизированных коллекций)

А ещё Для новых API лучше проектировать интерфейс сразу полным

Подробно

До Java 8 добавление метода в интерфейс означало, что весь код, реализующий его, перестанет компилироваться — а Collection и Iterable реализованы в бесчисленном количестве библиотек. Без default-методов появление stream() и forEach() было бы невозможно. Отсюда следует и правильное отношение к ним: это инструмент эволюции API, а не способ протащить в интерфейс полноценную реализацию. Ключевое ограничение никуда не делось — состояния у интерфейса по-прежнему нет, поля могут быть только public static final. Поэтому выбор между интерфейсом и абстрактным классом остался прежним: нужно общее изменяемое состояние — абстрактный класс, нужен контракт и множественная реализация — интерфейс.

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

  • Причина появления.
  • Ограничения и риски.

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

  • Считать, что default-методы отменили абстрактные классы.
  • Пытаться хранить состояние в интерфейсе.

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

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

Показать варианты и ответ
  • ✓Чтобы развивать интерфейсы без поломки реализаций
  • ✗Чтобы интерфейсы могли хранить изменяемое состояние, как абстрактные классы
  • ✗Чтобы заменить абстрактные классы во всех сценариях
  • ✗Чтобы ускорить вызовы методов интерфейса через инлайнинг

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

  • Почему у интерфейса не может быть состояния?
  • Когда всё-таки выбирают абстрактный класс?

Разбор темы

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

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

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

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

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