На сторінці документації 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 успадковує непов'язані за замовчуванням для методу () від типів В і С інтерфейс D поширює B, C
Ви можете виправити це так:
interface D extends B, C {
@Override
default void method() {
B.super.method();
}
}
- При множинному успадкуванні типу java це дозволяє, оскільки інтерфейс не містить змінних полів, і лише одна реалізація належить до класу, тому java не видає жодних проблем, і це дозволяє вам зробити це.
На закінчення можна сказати, що java не підтримує множинне успадкування стану, але він підтримує множинне успадкування реалізації та множинне успадкування типу .