Ainsi, permettre à des méthodes privées à être remplacée va causer une fuite d'encapsulation ou d'un risque de sécurité. Si nous supposons que c'était possible, alors que nous avions en arriver à la situation suivante:
-
Disons qu'il y a une méthode privée boolean hasCredentials()
puis une classe étendue pourrait simplement remplacer comme ceci:
boolean hasCredentials() { return true; }
brisant ainsi le contrôle de sécurité.
-
La seule façon pour la classe d'origine pour éviter cela serait de déclarer sa méthode final
. Mais maintenant, c'est les fuites de mise en œuvre de l'information grâce à l'encapsulation, parce qu'une classe dérivée de maintenant ne peut pas créer une méthode hasCredentials
plus: il serait en contradiction avec celle qui est définie dans la classe de base.
C'est mauvais: permet de dire que cette méthode n'existe pas, au premier abord, Base
. Maintenant, un réalisateur peut légitimement dériver une classe Derived
et donner une méthode hasCredentials
qui fonctionne comme prévu.
Mais maintenant, une nouvelle version de l'original, Base
classe est libéré. Son interface publique ne change pas (et n'ses invariants), donc on doit s'attendre à ce qu'il ne veut pas briser le code existant. Seulement, il n', parce que maintenant il y a un conflit de nom avec une méthode dans une classe dérivée.
Je pense que la question provient d'un malentendu:
Comment est-il /ne pas/ une violation de l'encapsulation de ne pas permettre à un parent privé de méthode pour être "remplacée" (c'est à dire, mis en œuvre de façon indépendante, avec la même signature, dans une classe enfant)
Le texte à l'intérieur des parenthèses est le contraire du texte avant elle. Java ne vous permettent de réaliser de façon indépendante [une méthode privée], avec la même signature, dans une classe enfant". Ne pas permettre cela violerait l'encapsulation, comme je l'ai expliqué ci-dessus.
Mais "pour ne pas permettre à un parent privé de méthode pour être "remplacée"" est quelque chose de différent, et nécessaires pour assurer l'encapsulation.