Étant donné les niveaux progressifs d'accès, private, package, protected et public, il serait inutilement restrictif de choisir protected puis package, car cela m'obligerait à autoriser l'accès aux sous-classes afin d'accorder l'accès aux autres membres du même package. Pourtant, intuitivement, il devrait être que les autres classes du même paquet sont plus fiables que les autres classes "à l'extérieur". Ainsi, protected se situe entre package et public dans la mesure où il permet une plus grande exposition de l'accès.
Je pense que la raison fondamentale repose sur l'intuition qu'il existe un niveau de "confiance" de base entre les classes d'un même paquet ; on peut raisonnablement s'attendre à ce qu'elles fassent la bonne chose entre elles - dans la plupart des cas, le paquet sera la responsabilité d'un seul ingénieur ou d'une seule équipe, il devrait donc y avoir une harmonie cohérente dans la conception.
12 votes
+1 Franchement, je veux aussi savoir pourquoi. Cela m'a toujours paru être l'une des décisions de conception les plus stupides de Java.
3 votes
@cletus : Plus j'y pense, plus j'en arrive à la conclusion que le "paquet privé" n'était pas une idée bien pensée. Pour que "package private" fonctionne réellement et offre une protection réelle, les paquets devraient être compilés dans une seule unité de compilation. Et il ne devrait pas être possible de les améliorer ultérieurement.