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