Junior
Как работает модификатор доступа protected в языках программирования?
sobes.tech AI
Risposta dell'AI
Il modificatore di accesso protected determina il livello di visibilità dei membri della classe (campi, metodi). L'accesso a questi è limitato:
- All'interno della classe: L'accesso è consentito. I membri
protectedsono visibili da qualsiasi punto all'interno della loro classe. - Nelle classi derivate: L'accesso è consentito. Le classi che ereditano da una classe con membri
protectedpossono accedere direttamente a questi membri, anche se si trovano in un altro package (in alcuni linguaggi, ad esempio Java). - All'interno di uno stesso package (in alcuni linguaggi, ad esempio Java): L'accesso è consentito, equivalente a
default(package-private). I membriprotectedsono visibili a tutte le classi nello stesso package, indipendentemente dall'ereditarietà. - Da fuori (altri package, classi non ereditate): L'accesso è vietato. Non è possibile accedere direttamente ai membri
protectedda classi che non ereditano o che non si trovano nello stesso package (Java).
Esempio (Java):
class BaseClass {
protected int protectedMember = 10;
protected void protectedMethod() {
// L'accesso dall'interno della classe è consentito
System.out.println("Metodo protetto di BaseClass");
}
}
class DerivedClass extends BaseClass {
void accessProtected() {
// L'accesso da una classe derivata è consentito
System.out.println(protectedMember);
protectedMethod();
}
}
class SamePackageClass {
void accessProtected(BaseClass obj) {
// In Java, l'accesso da un'altra classe nello stesso package è consentito
System.out.println(obj.protectedMember);
obj.protectedMethod();
}
}
class DifferentPackageClass {
// ...
// Il tentativo di accesso darà errore di compilazione
// obj.protectedMember;
// obj.protectedMethod();
}
Pertanto, protected garantisce un livello di incapsulamento più elevato rispetto a public, ma più basso rispetto a private o default, rendendo i membri della classe accessibili ai sottoclassi e, in alcuni linguaggi, alle classi nello stesso package.