Maison > Java > javaDidacticiel > Pourquoi ne puis-je pas accéder au membre protégé d'une superclasse à partir d'un autre package en Java ?

Pourquoi ne puis-je pas accéder au membre protégé d'une superclasse à partir d'un autre package en Java ?

Susan Sarandon
Libérer: 2024-12-07 20:45:16
original
738 Les gens l'ont consulté

Why Can't I Access a Superclass's Protected Member from a Different Package in Java?

Comprendre le modificateur protégé de Java et ses restrictions d'accessibilité

Le modificateur d'accès protégé en Java conduit souvent à une confusion quant à son utilisation prévue. Un tel cas se produit lorsque vous essayez d'accéder à un membre protégé d'une superclasse à partir d'un autre package.

Dans l'exemple fourni, la classe A contient une variable d'instance protectedInt déclarée avec un accès protégé. Selon la documentation Oracle, les membres protégés doivent être accessibles dans le même package ou sous-classes de leur classe dans d'autres packages. Cependant, lorsque la classe C (étendant la classe A) tente d'accéder à protectedInt, Eclipse signale que l'erreur "A.protectedInt" n'est pas visible.

La raison de cette erreur réside dans l'interprétation correcte du modificateur d'accès protégé. L'accès protégé permet d'utiliser des membres protégés au sein de la classe qui les déclare et uniquement dans les sous-classes de cette classe, quel que soit le package auquel ils appartiennent.

Pour illustrer, cet extrait de code fonctionne comme prévu :

C c = new C();
System.out.println(c.publicInt);
System.out.println(c.protectedInt);
Copier après la connexion

C'est parce que le type de c est une instance de C, qui est une sous-classe de A. Cependant, si c était une instance de A, accéder à protectedInt ne serait pas possible.

Ce comportement est conforme à la section 6.6.2 de la spécification du langage Java (JLS), qui stipule qu'un membre protégé n'est accessible qu'au sein des sous-classes, et si l'accès se fait via un accès au champ ou une expression d'invocation de méthode, le type de l'objet doit être la sous-classe ou une autre sous-classe.

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!

source:php.cn
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal