Meskipun alasan yang sering dikutip adalah bahwa "antarmuka menentukan API publik", menurut saya itu adalah penyederhanaan yang berlebihan. (Dan itu "berbau" logika melingkar juga.)
Tidak ada artinya memiliki antarmuka yang memiliki campuran pengubah akses; misalnya sebagian untuk umum dan sebagian dibatasi untuk kelas lain dalam paket yang sama dengan antarmuka. Bahkan, dalam beberapa kasus ini bisa berguna, IMO.
Sebenarnya, menurut saya bagian dari alasan di balik membuat anggota antarmuka menjadi publik secara implisit adalah karena itu membuat bahasa Java lebih sederhana :
Anggota antarmuka publik secara implisit lebih mudah ditangani oleh pemrogram. Berapa kali Anda melihat kode (kelas) di mana pengubah akses metode dipilih secara acak? Banyak programmer "biasa" yang kesulitan memahami cara terbaik untuk mengelola batasan abstraksi Java 1 . Menambahkan publik / dilindungi / paket-pribadi ke antarmuka membuatnya semakin sulit bagi mereka.
Anggota antarmuka publik secara implisit menyederhanakan spesifikasi bahasa ... dan karenanya menjadi tugas untuk penulis kompiler Java, dan orang-orang yang mengimplementasikan Reflection API.
Garis pemikiran bahwa "antarmuka mendefinisikan API publik" bisa dibilang merupakan konsekuensi (atau karakteristik) dari keputusan desain bahasa yang disederhanakan ... bukan sebaliknya. Namun pada kenyataannya, kedua garis pemikiran tersebut mungkin berkembang secara paralel di benak para desainer Java.
Bagaimanapun, tanggapan resmi terhadap RFE di JDK-8179193 memperjelas bahwa tim desain Java memutuskan 2 bahwa mengizinkan protected
antarmuka menambah kompleksitas untuk sedikit manfaat nyata. Kudos to @skomisa karena telah menemukan buktinya .
Bukti di RFE menyelesaikan masalah ini. Itulah alasan resmi mengapa itu belum ditambahkan.
1 - Tentu saja, programmer top-gun tidak mengalami kesulitan dengan hal-hal ini, dan mungkin menyukai palet fitur kontrol akses yang lebih kaya. Tapi, apa yang terjadi ketika kode mereka diserahkan kepada orang lain untuk dipertahankan?
2 - Anda mungkin tidak setuju dengan keputusan mereka atau alasan yang mereka nyatakan tapi itu bisa diperdebatkan.