Maison >Java >javaDidacticiel >Pourquoi ne puis-je pas accéder au membre protégé d'une superclasse à partir d'un autre package en 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);
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!