Maison >Java >javaDidacticiel >Pourquoi une sous-classe d'un package différent ne peut-elle pas accéder à un membre protégé de sa superclasse en Java ?
Navigation dans les modificateurs d'accès protégés de Java
Problème :
Considérons deux classes, A dans le package1 et C dans package2, où C étend A. La classe A définit une variable d'instance protectedInt déclarée avec le modificateur protected. Cependant, Eclipse signale une erreur lors de l'accès à ce protectedInt à partir de la classe C. Cela semble contredire la définition de protected dans la documentation, qui autorise l'accès au sein des sous-classes d'autres packages.
Réponse :
Le malentendu vient du contexte spécifique dans lequel l'accès protégé est accordé. Le JLS (Section 6.6.2) précise que les membres protégés sont effectivement accessibles à partir des sous-classes d'autres packages, mais uniquement pour les instances de la sous-classe ou les instances de sous-classes de la sous-classe.
Plus précisément, les membres protégés ne peuvent être accessible via une expression d'accès au champ (par exemple, E.Id) ou une expression d'invocation de méthode (par exemple, E.Id(. . .)) si le type de E est la sous-classe elle-même (c'est-à-dire S) ou une sous-classe de S.
Dans le scénario donné, le code qui tente d'accéder à a.protectedInt utilise une instance de A comme expression E. Puisque A n'est pas un sous-classe de C, cet accès n'est pas autorisé selon la règle JLS.
Par conséquent, le modificateur protected accorde l'accès aux membres protégés au sein des sous-classes, mais uniquement pour les instances de la sous-classe ou de sa sous-classes.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!