Как работает новая модель интерфейса Java 8 (включая алмаз, множественное наследование и приоритет)?

Как работает эта новая модель интерфейса, а что касается

  • проблема алмаза, которая может возникнуть из-за этого
  • множественный характер наследования этой реализации
  • и приоритет, с которым используются реализации интерфейса ?

Ответ 1

Вот подробное объяснение новой модели интерфейса Java 8 и проблемы с множественным наследованием.

Как вы можете видеть в этих примерах, начиная с JDK 8, Java ввел вид множественного наследования как для обоих, так и для class, а его интерфейс может содержать реализация того же метода (одно имя & подпись). Для решения проблемы алмаза проблема есть преимущество, в котором порядок используется реализация: только если класс реализует все стандартные/необязательные методы его интерфейсы, код может быть скомпилирован, а реализации этого класса. В противном случае компилятор пытается исправить Отсутствует реализация с интерфейсом по умолчанию реализация. И если есть несколько реализаций по умолчанию метода, то алмаз возникает проблема, и компилятор отклоняет компиляцию.
Модель новых интерфейсов Java 8 - результат приближающаяся обратная совместимость, i. е. хранить существующий код, написанный против интерфейсов pre Java 8 компилируется.

Ответ 2

Существует отличное объяснение в Java Lambda FAQ.
Вот цитата из Как насчет проблемы с алмазом?:

interface A {
    void m() default { ... }        
}
interface B extends A {}
interface C extends A {}
class D implements B, C {}

В начальном случае (код выше) реализация m, унаследованная D, однозначно определена A - существует нет другой возможность. Если ситуация изменилась, так что B теперь также объявляет реализацию по умолчанию m, которая становится реализацией, которую D наследует "наиболее конкретная реализации". Но если оба B и C предоставляют стандартные реализации, то они конфликтуют, а D должны либо использовать синтаксис X.super.m(...), чтобы явным образом выбрать один из них, либо переопределить сам метод, переопределив все объявления супертипа.

Обязательно ознакомьтесь с предыдущей статьей о правилах разрешения противоречивых деклараций метода и других статей по проекту Java Lambda - они неплохие.