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 ?

Pourquoi une sous-classe d'un package différent ne peut-elle pas accéder à un membre protégé de sa superclasse en Java ?

DDD
DDDoriginal
2024-12-08 22:51:11724parcourir

Why Can't a Subclass in a Different Package Access a Protected Member of its Superclass in 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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn