Sobes.tech
Junior

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

sobes.tech AI

Odpověď od AI

Modifikátor přístupu protected určuje úroveň viditelnosti členů třídy (polí, metod). Přístup k nim je omezen:

  1. Uvnitř třídy: Přístup je povolen. Členové protected jsou viditelní odkudkoli uvnitř své třídy.
  2. V odvozených třídách: Přístup je povolen. Třídy, které dědí od třídy s členy protected, mohou přímo přistupovat k těmto členům, i když jsou v jiném balíčku (v některých jazycích, například Java).
  3. Uvnitř stejného balíčku (v některých jazycích, například Java): Přístup je povolen, ekvivalentní default (package-private). Členové protected jsou viditelní ve všech třídách ve stejném balíčku, bez ohledu na dědičnost.
  4. Zvenčí (jiné balíčky, třídy, které nedědí): Přístup je zakázán. Přímý přístup k členům protected z tříd, které nedědí nebo nejsou ve stejném balíčku (Java), není možný.

Příklad (Java):

class BaseClass {
    protected int protectedMember = 10;

    protected void protectedMethod() {
        // Přístup z vnitřku třídy je povolen
        System.out.println("Chráněná metoda z BaseClass");
    }
}

class DerivedClass extends BaseClass {
    void accessProtected() {
        // Přístup z odvozené třídy je povolen
        System.out.println(protectedMember);
        protectedMethod();
    }
}

class SamePackageClass {
    void accessProtected(BaseClass obj) {
        // V Javě je přístup z jiné třídy ve stejném balíčku povolen
        System.out.println(obj.protectedMember);
        obj.protectedMethod();
    }
}

class DifferentPackageClass {
    // ...
    // Pokus o přístup způsobí kompilátorovou chybu
    // obj.protectedMember;
    // obj.protectedMethod();
}

Tímto způsobem protected zajišťuje vyšší úroveň zapouzdření než public, ale nižší než private nebo default, čímž činí členy třídy dostupnými pro dědické třídy a v některých jazycích i pro třídy ve stejném balíčku.