Изначально (с Java 1.5) это слово
использовалось для объявления
дефолтного значения элементов аннотации.
В Java 8 вместе с лямбдами и стримами
появилась острая необходимость дополнить стандартные интерфейсы новыми методами. Никто естественно не собирался ломать обратную совместимость, и
было предложено добавить
методы по умолчанию.
Теперь добавление ключевого слова
default к методу интерфейса позволяет добавить ему тело. Все новые методы старых интерфейсов снабжаются дефолтной реализацией.
В реализации такого метода его дефолтный вариант вызывается тем же синтаксисом, что и внешний класс из
вложенного:
InterfaceName.super.methodName().
Методы по умолчанию подошли еще на шаг к введению в Java беспроблемной версии множественного наследования –
примесям (mixin). Интерфейс не может иметь состояния, поэтому полноценные примеси всё ещё недоступны.