Sobes.tech
Junior

Как работает модификатор доступа protected в языках программирования?

sobes.tech IA

Réponse de l'IA

Le modificateur d’accès protected détermine le niveau de visibilité des membres de la classe (champs, méthodes). L’accès à ceux-ci est limité :

  1. À l’intérieur de la classe : L’accès est autorisé. Les membres protected sont visibles de n’importe où à l’intérieur de leur classe.
  2. Dans les classes dérivées : L’accès est autorisé. Les classes qui héritent d’une classe avec des membres protected peuvent accéder directement à ces membres, même si elles se trouvent dans un autre paquet (dans certains langages, par exemple Java).
  3. Dans un même paquet (dans certains langages, par exemple Java) : L’accès est autorisé, équivalent à default (package-private). Les membres protected sont visibles pour toutes les classes du même paquet, indépendamment de l’héritage.
  4. De l’extérieur (autres paquets, classes non héritées) : L’accès est interdit. Il n’est pas possible d’accéder directement aux membres protected depuis des classes qui n’héritent pas ou qui ne sont pas dans le même paquet (Java).

Exemple (Java) :

class BaseClass {
    protected int protectedMember = 10;

    protected void protectedMethod() {
        // L’accès depuis l’intérieur de la classe est autorisé
        System.out.println("Méthode protégée de BaseClass");
    }
}

class DerivedClass extends BaseClass {
    void accessProtected() {
        // L’accès depuis une classe dérivée est autorisé
        System.out.println(protectedMember);
        protectedMethod();
    }
}

class AnotherClassInSamePackage {
    void accessProtected(BaseClass obj) {
        // En Java, l’accès depuis une autre classe dans le même paquet est autorisé
        System.out.println(obj.protectedMember);
        obj.protectedMethod();
    }
}

class AnotherClassInDifferentPackage {
    // ...
    // La tentative d’accès sera une erreur de compilation
    // obj.protectedMember;
    // obj.protectedMethod();
}

Ainsi, protected offre un niveau d’encapsulation supérieur à public, mais inférieur à private ou default, rendant les membres de la classe accessibles aux héritiers et, dans certains langages, aux classes du même paquet.