Причина, по которой java заявила, что добавляет эти два новых метода, «обеспечивает двоичную совместимость с кодом, написанным для более старых версий этих интерфейсов».
Это относится только к методам по умолчанию (не статическим методам) и опускает какой-либо контекст. От Goetz, State of the Lambda
Назначение методов по умолчанию ... заключается в том, чтобы позволить интерфейсам развиваться совместимым образом после их первоначальной публикации.
Основная цель состоит в том, чтобы позволить эволюцию интерфейса, то есть, добавление новых методов. Если к интерфейсу добавлен новый метод, существующим классам, реализующим интерфейс, будет недоставать реализации, что было бы несовместимо. Чтобы быть совместимым, реализация должна произойти откуда-то, поэтому она предоставляется по умолчанию.
Зачем искажать интерфейс оригинальной концепции, которая должна быть полностью абстрактной, чтобы поддерживать существующие архитектурные проблемы?
Основная цель интерфейса Java - specify a contract, которую может реализовать любой класс без необходимости изменять свою позицию в иерархии классов. Верно, что до Java 8 интерфейсы были чисто абстрактными.Однако это не является существенным свойством интерфейсов. Даже когда включены методы по умолчанию, интерфейс в его сердце все еще указывает контракт на класс реализации. Класс реализации может переопределять методы по умолчанию, поэтому класс по-прежнему полностью контролирует его реализацию. (Заметим также, что default methods cannot be final.)
В чем разница между использованием абстрактного класса и новую версию интерфейса, кроме способности класса, чтобы расширить несколько интерфейсов?
Способность класса расширять несколько интерфейсов тесно связана с другим различием между интерфейсами и абстрактными классами, а именно, что интерфейсы не могут содержать состояние. Это основная трудность при разрешении множественного наследования: если суперкласс должен появляться несколько раз в родословной класса, будет ли состояние суперкласса появляться только один или несколько раз? (Это так называемая проблема с алмазами.)
Еще одно отличие состоит в том, что абстрактные классы могут определять методы и поля для совместного использования с подклассами, но не с вызывающими, с использованием защищенных и уровней доступа к частным пакетам. Интерфейсы могут иметь только общедоступные методы.
(В Java 9, поддержка частных методов была добавлена. Это полезно для совместного осуществления среди стандартных или статических методов интерфейса.)
Наконец, статические методы в интерфейсах не влияют на наследование классов, и они не являются частью контракта с интерфейсом. Это всего лишь способ организации полезных методов более удобным способом. Например, обычное использование статических методов в интерфейсе для статических заводских методов. Если статические методы не допускались в интерфейсах, статические методы фабрики должны были бы быть помещены в класс компаньона. Разрешение статических методов в интерфейсах позволяет группировать такие методы с самим интерфейсом, когда это необходимо.
Возможный дубликат http://stackoverflow.com/questions/22591499/what-are-the-differences-between-abstract-classes-and-interfaces-in-java-8 – Vulcan
@ Vulcan мой вопрос нацелен на использование обновлений java 8, а не разница между абстрактным и интерфейсом –