Từ trang tài liệu Oracle về nhiều loại thừa kế, chúng ta có thể tìm thấy câu trả lời chính xác ở đây . Ở đây trước tiên chúng ta nên biết loại đa thừa kế trong java: -
- Nhiều kế thừa của nhà nước.
- Nhiều kế thừa thực hiện.
- Nhiều kiểu thừa kế.
Java "không hỗ trợ nhiều kế thừa trạng thái, nhưng nó hỗ trợ nhiều kế thừa thực hiện với các phương thức mặc định kể từ khi phát hành java 8 và nhiều kế thừa kiểu với giao diện.
Sau đó, ở đây câu hỏi đặt ra cho "vấn đề kim cương" và cách Java giải quyết vấn đề đó: -
Trong trường hợp nhiều kế thừa của trình biên dịch java thực hiện sẽ đưa ra lỗi biên dịch và yêu cầu người dùng sửa nó bằng cách chỉ định tên giao diện. Ví dụ ở đây: -
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 {
}
Vì vậy, ở đây chúng ta sẽ gặp lỗi như: - giao diện D kế thừa các mặc định không liên quan cho phương thức () từ các loại giao diện B và C D mở rộng B, C
Bạn có thể sửa nó như: -
interface D extends B, C {
@Override
default void method() {
B.super.method();
}
}
- Trong nhiều kế thừa kiểu java cho phép vì giao diện không chứa các trường có thể thay đổi và chỉ có một triển khai sẽ thuộc về lớp nên java không đưa ra bất kỳ vấn đề nào và nó cho phép bạn làm như vậy.
Trong phần Kết luận, chúng ta có thể nói rằng java không hỗ trợ nhiều kế thừa trạng thái nhưng nó hỗ trợ nhiều kế thừa thực hiện và nhiều kế thừa kiểu .