Aunque la razón citada a menudo es que "las interfaces definen las API públicas", creo que es una simplificación excesiva. (Y también "huele" a lógica circular).
No tendría sentido tener interfaces que tuvieran una mezcla de modificadores de acceso; por ejemplo, en parte pública y en parte restringida a otras clases en el mismo paquete que la interfaz. De hecho, en algunos casos esto podría ser muy útil, en mi opinión.
En realidad, creo que la parte del razonamiento detrás de hacer que los miembros de una interfaz sean implícitamente públicos es que hace que el lenguaje Java sea más simple :
Los miembros de la interfaz pública implícitamente son más fáciles de manejar para los programadores. ¿Cuántas veces ha visto código (clases) donde los modificadores de acceso al método se eligieron aparentemente al azar? Muchos programadores "normales" tienen dificultades para comprender la mejor forma de gestionar los límites de abstracción de Java 1 . Agregar público / protegido / paquete-privado a las interfaces hace que sea aún más difícil para ellos.
Los miembros de la interfaz pública implícitamente simplifican la especificación del lenguaje ... y, por lo tanto, la tarea para los escritores de compiladores de Java y las personas que implementan las API de Reflection.
La línea de pensamiento de que "las interfaces definen las API públicas" es posiblemente una consecuencia (o característica) de la decisión de simplificar el diseño del lenguaje ... no al revés. Pero en realidad, las dos líneas de pensamiento probablemente se desarrollaron en paralelo en la mente de los diseñadores de Java.
En cualquier caso, la respuesta oficial a la RFE en JDK-8179193 deja en claro que el equipo de diseño de Java decidió 2 que permitir las protected
interfaces agrega complejidad para un beneficio real mínimo. Felicitaciones a @skomisa por encontrar la evidencia .
La evidencia en la RFE resuelve el problema. Esa es la razón oficial por la que no se ha agregado.
1 - Por supuesto, los programadores de primera no tienen dificultad con estas cosas y pueden agradecer una paleta más rica de funciones de control de acceso. Pero, ¿qué sucede cuando su código se entrega a otra persona para que lo mantenga?
2 - Puede que no esté de acuerdo con su decisión o con su razonamiento declarado, pero eso es discutible.