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é :
- À l’intérieur de la classe : L’accès est autorisé. Les membres
protectedsont visibles de n’importe où à l’intérieur de leur classe. - Dans les classes dérivées : L’accès est autorisé. Les classes qui héritent d’une classe avec des membres
protectedpeuvent accéder directement à ces membres, même si elles se trouvent dans un autre paquet (dans certains langages, par exemple Java). - Dans un même paquet (dans certains langages, par exemple Java) : L’accès est autorisé, équivalent à
default(package-private). Les membresprotectedsont visibles pour toutes les classes du même paquet, indépendamment de l’héritage. - 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
protecteddepuis 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.