Bien que la raison souvent citée soit que "les interfaces définissent les API publiques", je pense que c'est une simplification excessive. (Et ça «sent» aussi la logique circulaire.)
Il ne serait pas inutile d'avoir des interfaces qui ont un mélange de modificateurs d'accès; par exemple en partie public et en partie restreint à d'autres classes dans le même package que l'interface. En fait, dans certains cas, cela pourrait être utile en bas à droite, OMI.
En fait, je pense que le raisonnement derrière la publication implicite des membres d'une interface est que cela simplifie le langage Java :
Les membres de l'interface implicitement publics sont plus simples à gérer pour les programmeurs. Combien de fois avez-vous vu du code (classes) où les modificateurs d'accès aux méthodes ont été choisis apparemment au hasard? De nombreux programmeurs «ordinaires» ont du mal à comprendre comment gérer au mieux les limites d'abstraction Java 1 . L'ajout de public / protected / package-private aux interfaces rend la tâche encore plus difficile pour elles.
Implicitement, les membres de l'interface publique simplifient la spécification du langage ... et donc la tâche des rédacteurs du compilateur Java et des personnes qui implémentent les API Reflection.
La ligne de pensée selon laquelle les "interfaces définissent les API publiques" est sans doute une conséquence (ou caractéristique) de la décision de simplification de la conception du langage ... et non l'inverse. Mais en réalité, les deux lignes de pensée se sont probablement développées en parallèle dans l'esprit des concepteurs de Java.
Quoi qu'il en soit, la réponse officielle à la RFE dans JDK-8179193 indique clairement que l'équipe de conception Java a décidé 2 que permettreprotected
les interfaces ajoute de la complexité pour peu d'avantages réels. Félicitations à @skomisa pour avoir trouvé les preuves .
Les preuves contenues dans la RFE règlent la question. C'est la raison officielle pour laquelle cela n'a pas été ajouté.
1 - Bien sûr, les programmeurs de haut niveau n'ont aucune difficulté avec ces choses, et peuvent accueillir une palette plus riche de fonctionnalités de contrôle d'accès. Mais que se passe-t-il lorsque leur code est remis à quelqu'un d'autre pour qu'il le maintienne?
2 - Vous pouvez être en désaccord avec leur décision ou leur raisonnement, mais c'est sans objet.