Sobes.tech
Junior

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

sobes.tech AI

Antwoord van AI

De toegangsmodule protected bepaalt het zichtbaarheidniveau van de leden van de klasse (velden, methoden). Toegang tot hen is beperkt:

  1. Binnen de klasse: Toegang is toegestaan. protected-leden zijn zichtbaar vanaf elke plek binnen hun klasse.
  2. In afgeleide klassen: Toegang is toegestaan. Klassen die erven van een klasse met protected-leden kunnen direct toegang krijgen tot deze leden, zelfs als ze zich in een ander pakket bevinden (in sommige talen, bijvoorbeeld Java).
  3. Binnen hetzelfde pakket (in sommige talen, bijvoorbeeld Java): Toegang is toegestaan, gelijk aan default (package-private). protected-leden zijn zichtbaar voor alle klassen in hetzelfde pakket, ongeacht erfelijkheid.
  4. Van buitenaf (andere pakketten, niet-erfende klassen): Toegang is verboden. Directe toegang tot protected-leden vanuit klassen die niet erven of niet in hetzelfde pakket zitten (Java) is niet mogelijk.

Voorbeeld (Java):

class BaseClass {
    protected int protectedMember = 10;

    protected void protectedMethod() {
        // Toegang binnen de klasse is toegestaan
        System.out.println("Protected methode van BaseClass");
    }
}

class DerivedClass extends BaseClass {
    void accessProtected() {
        // Toegang vanuit een afgeleide klasse is toegestaan
        System.out.println(protectedMember);
        protectedMethod();
    }
}

class SamePackageClass {
    void accessProtected(BaseClass obj) {
        // In Java is toegang vanuit een andere klasse in hetzelfde pakket toegestaan
        System.out.println(obj.protectedMember);
        obj.protectedMethod();
    }
}

class DifferentPackageClass {
    // ...
    // Poging tot toegang zal een compilatiefout veroorzaken
    // obj.protectedMember;
    // obj.protectedMethod();
}

Dus, protected biedt een hoger niveau van encapsulatie dan public, maar lager dan private of default, waardoor klasseleden toegankelijk zijn voor afgeleiden en, in sommige talen, voor klassen in hetzelfde pakket.