Sobes.tech
Junior

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

sobes.tech AI

Odpoveď od AI

Prístupový modifikátor protected určuje úroveň viditeľnosti členov triedy (polí, metód). Prístup k nim je obmedzený:

  1. Vnútri triedy: Prístup je povolený. Členovia protected sú viditeľní odkiaľkoľvek vnútri svojej triedy.
  2. V odvodzujúcich triedach: Prístup je povolený. Triedy, ktoré dedičia od triedy s členmi protected, môžu priamo pristupovať k týmto členom, aj keď sú v inom balíku (v niektorých jazykoch, napríklad Java).
  3. V rámci toho istého balíka (v niektorých jazykoch, napríklad Java): Prístup je povolený, ekvivalentne s default (package-private). Členovia protected sú viditeľní pre všetky triedy v tom istom balíku, bez ohľadu na dedičstvo.
  4. Z vonku (iné balíky, triedy, ktoré nededia): Prístup je zakázaný. Priamy prístup k členom protected z tried, ktoré nededia alebo nie sú v tom istom balíku (Java), nie je možný.

Príklad (Java):

class BaseClass {
    protected int protectedMember = 10;

    protected void protectedMethod() {
        // Prístup z vnútra triedy je povolený
        System.out.println("Chránená metóda z BaseClass");
    }
}

class DerivedClass extends BaseClass {
    void accessProtected() {
        // Prístup z odvodzujúcej triedy je povolený
        System.out.println(protectedMember);
        protectedMethod();
    }
}

class SamePackageClass {
    void accessProtected(BaseClass obj) {
        // V Jave, prístup z inej triedy v tom istom balíku je povolený
        System.out.println(obj.protectedMember);
        obj.protectedMethod();
    }
}

class DifferentPackageClass {
    // ...
    // Pokus o prístup spôsobí chybu kompilácie
    // obj.protectedMember;
    // obj.protectedMethod();
}

Takto protected zabezpečuje vyššiu úroveň enkapsulácie než public, ale nižšiu než private alebo default, čím robí členov triedy dostupnými pre dedičov a, v niektorých jazykoch, pre triedy v tom istom balíku.