Junior
Как работает модификатор доступа protected в языках программирования?
sobes.tech AI
Odpowiedź od AI
Modyfikator dostępu protected określa poziom widoczności członków klasy (pól, metod). Dostęp do nich jest ograniczony:
- Wewnątrz klasy: Dostęp jest dozwolony. Członkowie
protectedsą widoczni z dowolnego miejsca wewnątrz swojej klasy. - W klasach dziedziczących: Dostęp jest dozwolony. Klasy dziedziczące po klasie z członkami
protectedmogą bezpośrednio odwoływać się do tych członków, nawet jeśli znajdują się w innym pakiecie (w niektórych językach, np. Java). - W tym samym pakiecie (w niektórych językach, np. Java): Dostęp jest dozwolony, równoważny
default(package-private). Członkowieprotectedsą widoczni dla wszystkich klas w tym samym pakiecie, niezależnie od dziedziczenia. - Z zewnątrz (inne pakiety, klasy nie będące dziedziczącymi): Dostęp jest zabroniony. Bezpośredni dostęp do członków
protectedz klas, które nie dziedziczą lub nie znajdują się w tym samym pakiecie (Java), jest niemożliwy.
Przykład (Java):
class BaseClass {
protected int protectedMember = 10;
protected void protectedMethod() {
// Dostęp z wnętrza klasy jest dozwolony
System.out.println("Chroniona metoda z BaseClass");
}
}
class DerivedClass extends BaseClass {
void accessProtected() {
// Dostęp z klasy dziedziczącej jest dozwolony
System.out.println(protectedMember);
protectedMethod();
}
}
class SamePackageClass {
void accessProtected(BaseClass obj) {
// W Java dostęp z innej klasy w tym samym pakiecie jest dozwolony
System.out.println(obj.protectedMember);
obj.protectedMethod();
}
}
class DifferentPackageClass {
// ...
// Próba dostępu będzie błędem kompilacji
// obj.protectedMember;
// obj.protectedMethod();
}
W ten sposób protected zapewnia wyższy poziom enkapsulacji niż public, ale niższy niż private lub default, czyniąc członków klasy dostępnymi dla dziedziczących i, w niektórych językach, dla klas w tym samym pakiecie.