Maison > Java > javaDidacticiel > Les sous-classes de différents packages peuvent-elles accéder directement aux membres protégés d'une superclasse ?

Les sous-classes de différents packages peuvent-elles accéder directement aux membres protégés d'une superclasse ?

Susan Sarandon
Libérer: 2024-12-07 16:30:15
original
709 Les gens l'ont consulté

Can Subclasses in Different Packages Directly Access a Superclass's Protected Members?

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
    }
}
Copier après la connexion

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);
Copier après la connexion

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!

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