Sebbene la ragione spesso citata sia che "le interfacce definiscono le API pubbliche", penso che sia una semplificazione eccessiva. (E "odora" anche di logica circolare.)
Non sarebbe privo di significato avere interfacce che hanno una combinazione di modificatori di accesso; ad esempio, in parte pubblico e in parte limitato ad altre classi nello stesso pacchetto dell'interfaccia. In effetti, in alcuni casi questo potrebbe essere utile in basso a destra, IMO.
In realtà, penso che la parte del ragionamento che sta dietro a rendere i membri di un'interfaccia implicitamente pubblici sia che rende il linguaggio Java più semplice :
I membri dell'interfaccia implicitamente pubblica sono più semplici da gestire per i programmatori. Quante volte hai visto codice (classi) in cui i modificatori di accesso al metodo sono stati scelti apparentemente a caso? Molti programmatori "normali" hanno difficoltà a capire come gestire al meglio i confini di astrazione Java 1 . L'aggiunta di public / protected / package-private alle interfacce rende le cose ancora più difficili.
I membri dell'interfaccia implicitamente pubblica semplificano la specifica del linguaggio ... e quindi l'attività per gli autori di compilatori Java e le persone che implementano le API di Reflection.
La linea di pensiero che "le interfacce definiscono le API pubbliche" è probabilmente una conseguenza (o caratteristica) della decisione di progettazione del linguaggio semplificante ... non il contrario. Ma in realtà, le due linee di pensiero si sono sviluppate probabilmente in parallelo nella mente dei progettisti Java.
In ogni caso, la risposta ufficiale alla RFE in JDK-8179193 chiarisce che il team di progettazione Java ha deciso 2 che consentire le protected
interfacce aggiunge complessità con pochi vantaggi reali. Complimenti a @skomisa per aver trovato le prove .
Le prove nella RFE risolvono la questione. Questo è il motivo ufficiale per cui non è stato aggiunto.
1 - Naturalmente, i migliori programmatori non hanno difficoltà con queste cose e potrebbero accogliere una gamma più ricca di funzioni di controllo degli accessi. Ma cosa succede quando il loro codice viene consegnato a qualcun altro per mantenerlo?
2 - Potresti non essere d'accordo con la loro decisione o il loro ragionamento dichiarato, ma questo è discutibile.