Comprendre l'accès protégé en Java
En Java, le modificateur protected est destiné à permettre l'accès à certains membres au sein d'un même package et aux sous-classes dans d'autres paquets. Cependant, une idée fausse courante survient lors de l'accès à des membres protégés à partir d'une instance de la superclasse en dehors de la sous-classe.
Considérez l'exemple suivant :
// Class A package package1; public class A { protected int protectedInt = 1; } // Class C package package2; import package1.A; public class C extends A { public void go() { A a = new A(); System.out.println(a.publicInt); System.out.println(a.protectedInt); // Eclipse underlines this line } }
Eclipse génère une erreur sur la ligne où a. protectedInt est accédé, affirmant qu'il n'est pas visible. Cela semble contredire la définition de protected en Java : "Le modificateur protected spécifie que le membre n'est accessible que dans son propre package (comme avec package-private) et, en outre, par une sous-classe de sa classe dans un autre package."
Résoudre l'idée fausse
La clé pour comprendre ce comportement réside dans la définition de protégé, car il ne s'applique qu'aux sous-classes. Plus précisément, l'accès aux membres protégés n'est autorisé que dans le corps d'une sous-classe.
Par conséquent, le membre protégé protectedInt est accessible depuis la classe C, mais uniquement pour les instances de la classe C elle-même ou les instances des sous-classes de la classe C. . Il n'est pas accessible directement à partir des instances de la superclasse, même si elles se trouvent dans le même package.
Pour résoudre l'erreur dans la méthode go, vous devrez plutôt créer une instance de classe C. de la classe A :
C c = new C(); System.out.println(c.publicInt); System.out.println(c.protectedInt);
Cela accédera correctement au membre protégé via l'instance de 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!