Мы знаем, что Java не позволяет несколько классов, так как это привело бы в Diamond Problem где компилятор не может решить, какой метод суперкласса использовать. С помощью методов по умолчанию в интерфейсе Diamond Problem были представлены в Java 8. То есть, если класс реализует два интерфейса, каждый из которых определяет один и тот же метод по умолчанию, а класс реализации не переопределяет общий метод по умолчанию, компилятор не может решить, какую реализацию выбрать.
Решение:
Java 8 требует, чтобы обеспечить реализацию методов по умолчанию, реализованных более одного интерфейса. Поэтому, если класс будет реализовывать оба интерфейса, упомянутые выше, он должен будет обеспечить реализацию для общего метода по умолчанию. В противном случае компилятор будет вызывать ошибку времени компиляции.
Вопрос:
Почему это решение не применимо для наследования множественного класса, путем переопределения общих методов, введенных класса ребенка?
Я согласен с аргументом общего состояния для проблемы с алмазом, но не менее, если бы у вас была поддержка множественного наследования в * Java *, вам пришлось бы решить проблему выбора одной из нескольких реализаций одного метод. Эта проблема заявлена в вопросе и как она решена для интерфейсов в Java 8. То же самое решение не может быть применено для классов. Или я что-то пропустил? – Harmlezz
@ Harmlezz: как указано в последнем абзаце, проблема, связанная с необходимостью устранения неоднозначности между несколькими унаследованными неавтоматическими методами, является проблемой множественного наследования в целом, но для этого не требуется общий тип супер, поэтому , не имеет отношения к проблеме * Diamond *. Вы правы, что это проблема, которая не может быть решена вообще для классов, отличных от '' interface', но тем не менее, это не особая проблема, называемая «Проблема с алмазами». – Holger