Sobes.tech
Junior

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

sobes.tech KI

Antwort von AI

Der Zugriffsschutzmodifikator protected legt die Sichtbarkeitsstufe der Klassenmitglieder (Felder, Methoden) fest. Der Zugriff darauf ist eingeschränkt:

  1. Innerhalb der Klasse: Der Zugriff ist erlaubt. protected-Mitglieder sind von überall innerhalb ihrer Klasse sichtbar.
  2. In abgeleiteten Klassen: Der Zugriff ist erlaubt. Klassen, die von einer Klasse mit protected-Mitgliedern erben, können direkt auf diese Mitglieder zugreifen, auch wenn sie sich in einem anderen Paket befinden (in einigen Sprachen, z.B. Java).
  3. Innerhalb desselben Pakets (in einigen Sprachen, z.B. Java): Der Zugriff ist erlaubt, entsprechend default (package-private). protected-Mitglieder sind für alle Klassen im selben Paket sichtbar, unabhängig von der Vererbung.
  4. Von außen (andere Pakete, Klassen, die nicht erben): Der Zugriff ist verboten. Der direkte Zugriff auf protected-Mitglieder aus Klassen, die nicht erben oder sich nicht im selben Paket befinden (Java), ist nicht möglich.

Beispiel (Java):

class BaseClass {
    protected int protectedMember = 10;

    protected void protectedMethod() {
        // Zugriff innerhalb der Klasse ist erlaubt
        System.out.println("Geschützte Methode von BaseClass");
    }
}

class DerivedClass extends BaseClass {
    void accessProtected() {
        // Zugriff in der abgeleiteten Klasse ist erlaubt
        System.out.println(protectedMember);
        protectedMethod();
    }
}

class AnotherClassInSamePackage {
    void accessProtected(BaseClass obj) {
        // In Java ist der Zugriff aus einer anderen Klasse im selben Paket erlaubt
        System.out.println(obj.protectedMember);
        obj.protectedMethod();
    }
}

class AnotherClassInDifferentPackage {
    // ...
    // Der Zugriff wird einen Kompilierungsfehler verursachen
    // obj.protectedMember;
    // obj.protectedMethod();
}

Daher bietet protected eine höhere Kapselungsebene als public, aber eine niedrigere als private oder default, wodurch Klassenmitglieder für Erben und in einigen Sprachen auch für Klassen im selben Paket zugänglich sind.