Như đã đề cập trong các câu trả lời khác, khả năng thêm triển khai vào giao diện đã được thêm vào để cung cấp khả năng tương thích ngược trong khung Bộ sưu tập. Tôi cho rằng việc cung cấp khả năng tương thích ngược có khả năng là lý do chính đáng duy nhất để thêm triển khai vào giao diện.
Mặt khác, nếu bạn thêm triển khai vào một giao diện, bạn đang vi phạm luật cơ bản về lý do tại sao giao diện được thêm vào ngay từ đầu. Java là một ngôn ngữ kế thừa duy nhất, không giống như C ++, cho phép nhiều kế thừa. Các giao diện cung cấp các lợi ích đánh máy đi kèm với một ngôn ngữ hỗ trợ nhiều kế thừa mà không đưa ra các vấn đề đi kèm với nhiều kế thừa.
Cụ thể hơn, Java chỉ cho phép kế thừa duy nhất một triển khai, nhưng nó cho phép nhiều kế thừa giao diện. Ví dụ: sau đây là mã Java hợp lệ:
class MyObject extends String implements Runnable, Comparable { ... }
MyObject
kế thừa chỉ một thực hiện, nhưng nó kế thừa ba hợp đồng.
Java đã thông qua nhiều kế thừa thực hiện vì nhiều kế thừa thực hiện đi kèm với một loạt các vấn đề nhức nhối, nằm ngoài phạm vi của câu trả lời này. Các giao diện đã được thêm vào để cho phép nhiều kế thừa hợp đồng (còn gọi là giao diện) mà không gặp sự cố về kế thừa nhiều lần thực hiện.
Để ủng hộ quan điểm của tôi, đây là một trích dẫn của Ken Arnold và James Gosling từ cuốn sách Ngôn ngữ lập trình Java, ấn bản thứ 4 :
Kế thừa duy nhất loại trừ một số thiết kế hữu ích và chính xác. Các vấn đề của nhiều kế thừa phát sinh từ nhiều kế thừa thực hiện, nhưng trong nhiều trường hợp, nhiều kế thừa được sử dụng để kế thừa một số hợp đồng trừu tượng và có lẽ là một triển khai cụ thể. Cung cấp một phương tiện để kế thừa một hợp đồng trừu tượng mà không kế thừa một triển khai cho phép gõ các lợi ích của nhiều kế thừa mà không gặp các vấn đề về kế thừa nhiều triển khai. Kế thừa của một hợp đồng trừu tượng được gọi là
thừa kế giao diện . Ngôn ngữ lập trình Java hỗ trợ kế thừa giao diện bằng cách cho phép bạn khai báo một interface
kiểu