Embora o motivo frequentemente citado seja que "as interfaces definem APIs públicas", acho que é uma simplificação excessiva. (E também "cheira" a lógica circular.)
Não faria sentido ter interfaces com uma mistura de modificadores de acesso; por exemplo, parcialmente público e parcialmente restrito a outras classes no mesmo pacote da interface. Na verdade, em alguns casos, isso poderia ser útil, IMO.
Na verdade, acho que a parte do raciocínio por trás de tornar os membros de uma interface implicitamente públicos é que isso torna a linguagem Java mais simples :
Membros de interface implicitamente públicos são mais simples de lidar para os programadores. Quantas vezes você já viu código (classes) em que os modificadores de acesso do método foram escolhidos aparentemente de forma aleatória? Muitos programadores "comuns" têm dificuldade em entender a melhor forma de gerenciar os limites de abstração do Java 1 . Adicionar public / protected / package-private às interfaces torna ainda mais difícil para eles.
Os membros da interface implicitamente públicos simplificam a especificação da linguagem ... e, portanto, a tarefa para os escritores do compilador Java e as pessoas que implementam as APIs de reflexão.
A linha de pensamento de que as "interfaces definem APIs públicas" é indiscutivelmente uma consequência (ou característica) da simplificação da decisão de design de linguagem ... e não o contrário. Mas, na realidade, as duas linhas de pensamento provavelmente se desenvolveram em paralelo nas mentes dos designers de Java.
De qualquer forma, a resposta oficial ao RFE no JDK-8179193 deixa claro que a equipe de design Java decidiu 2 que permitir protected
interfaces adiciona complexidade para poucos benefícios reais. Parabéns a @skomisa por encontrar as evidências .
A evidência no RFE resolve a questão. Essa é a razão oficial pela qual não foi adicionado.
1 - É claro que os programadores de primeira linha não têm dificuldade com essas coisas e podem receber uma paleta mais rica de recursos de controle de acesso. Mas, o que acontece quando o código é entregue a outra pessoa para manutenção?
2 - Você pode discordar da decisão ou do raciocínio deles, mas isso é discutível.