Ради чего в Java 8 добавили default-методы интерфейсов?
Эволюция 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-методы отменили абстрактные классы.
- Пытаться хранить состояние в интерфейсе.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✓Чтобы развивать интерфейсы без поломки реализаций
- ✗Чтобы интерфейсы могли хранить изменяемое состояние, как абстрактные классы
- ✗Чтобы заменить абстрактные классы во всех сценариях
- ✗Чтобы ускорить вызовы методов интерфейса через инлайнинг
Что спросят дальше
- Почему у интерфейса не может быть состояния?
- Когда всё-таки выбирают абстрактный класс?
Разбор темы
- Интерфейсы против абстрактных классов
Контракт против частичной реализации, default/static/private-методы, разрешение конфликта default-методов и критерий выбора.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.