Mặc dù lý do thường được trích dẫn là "các giao diện xác định các API công khai", tôi nghĩ rằng đó là một sự đơn giản hóa quá mức. (Và nó cũng "có mùi" của logic vòng tròn.)
Sẽ không vô nghĩa nếu có các giao diện có hỗn hợp các công cụ sửa đổi truy cập; ví dụ một phần công khai và một phần hạn chế đối với các lớp khác trong cùng gói với giao diện. Trên thực tế, trong một số trường hợp, điều này có thể hữu ích, IMO.
Trên thực tế, tôi nghĩ rằng một phần lý do đằng sau việc làm cho các thành viên của một giao diện hoàn toàn công khai là nó làm cho ngôn ngữ Java đơn giản hơn :
Các thành viên giao diện công khai ngầm sẽ đơn giản hơn đối với các lập trình viên. Đã bao nhiêu lần bạn thấy mã (các lớp) trong đó các công cụ sửa đổi truy cập phương thức được chọn dường như ngẫu nhiên? Rất nhiều lập trình viên "bình thường" gặp khó khăn trong việc hiểu cách tốt nhất để quản lý ranh giới trừu tượng của Java 1 . Thêm công khai / bảo vệ / gói-riêng tư vào các giao diện làm cho chúng càng khó khăn hơn.
Các thành viên giao diện công khai hoàn toàn đơn giản hóa đặc tả ngôn ngữ ... và do đó nhiệm vụ dành cho người viết trình biên dịch Java và những người triển khai các API phản chiếu.
Dòng suy nghĩ rằng "các giao diện xác định các API công khai" được cho là hệ quả (hoặc đặc điểm) của quyết định thiết kế ngôn ngữ đơn giản hóa ... chứ không phải ngược lại. Nhưng trên thực tế, hai luồng suy nghĩ có lẽ đã phát triển song song trong tâm trí của các nhà thiết kế Java.
Ở bất kỳ mức độ nào, phản hồi chính thức đối với RFE trong JDK-8179193 cho thấy rõ ràng rằng nhóm thiết kế Java đã quyết định 2 rằng việc cho phép các protected
giao diện làm tăng thêm độ phức tạp vì ít lợi ích thực sự. Kudos cho @skomisa để tìm ra bằng chứng .
Bằng chứng trong RFE giải quyết vấn đề. Đó là lý do chính thức tại sao điều đó đã không được thêm vào.
1 - Tất nhiên, các lập trình viên hàng đầu không gặp khó khăn gì với những điều này và có thể chào đón một bảng tính năng kiểm soát truy cập phong phú hơn. Nhưng, điều gì sẽ xảy ra khi mã của họ được giao cho người khác duy trì?
2 - Bạn có thể không đồng ý với quyết định của họ hoặc lý do đã nêu của họ nhưng đó là tranh luận.