Из страницы документации Oracle о многожильном типе наследования, мы можем найти точный ответ здесь . Здесь мы должны сначала узнать тип множественного наследования в java: -
- Множественное наследование состояния.
- Множественное наследование реализации.
- Множественное наследование типа.
Java "не поддерживает множественное наследование состояния, но поддерживает множественное наследование реализации с помощью методов по умолчанию, начиная с выпуска java 8, и множественное наследование типа с интерфейсами.
Тогда возникает вопрос о «алмазной проблеме» и о том, как Java справляется с этим:
В случае множественного наследования реализации Java-компилятор выдает ошибку компиляции и просит пользователя исправить ее, указав имя интерфейса. Пример здесь: -
interface A {
void method();
}
interface B extends A {
@Override
default void method() {
System.out.println("B");
}
}
interface C extends A {
@Override
default void method() {
System.out.println("C");
}
}
interface D extends B, C {
}
Итак, здесь мы получим ошибку, так как: - интерфейс D наследует несвязанные значения по умолчанию для метода () от типов B и C, интерфейс D расширяет B, C
Вы можете исправить это так: -
interface D extends B, C {
@Override
default void method() {
B.super.method();
}
}
- При множественном наследовании типа java это позволяет, потому что интерфейс не содержит изменяемых полей, и только одна реализация будет принадлежать классу, поэтому java не вызывает никаких проблем и позволяет вам это делать.
В заключение мы можем сказать, что java не поддерживает множественное наследование состояния, но поддерживает множественное наследование реализации и множественное наследование типа .