Проблема с алмазом применима только к реализации inheritance (extends
во всех версиях Java до Java 8). Это не относится к API inheritance (implements
во всех версиях Java до Java 8).
Поскольку методы интерфейса с сигнатурами типа соответствия совместимы, нет алмаз, если вы наследуете одну и ту же подпись метода в два раза: подписи сигнатур метода просто сливаются. (И если сигнатуры типа не совпадают, то у вас также нет проблемы с алмазом.)
В Java 7 и ниже единственный способ наследовать реализацию код был через ключевое слово extends
, которое ограничивает не более одного родителя. Поэтому нет наследования множественной реализации и проблемы с алмазом не существует.
Java 8 добавляет новую морщину, потому что она позволяет интерфейсам иметь код реализации. Он все еще избегает проблемы с алмазом, просто отступая от предыдущего поведения (без наследования реализации), когда вы реализуете несколько интерфейсов с методами, имеющими соответствующие подписи.