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
Libérer: 2024-12-08 22:51:11
original
800 Les gens l'ont consulté

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 de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal