Sobes.tech
Junior

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

sobes.tech AI

Răspuns de la AI

Modificatorul de acces protected determină nivelul de vizibilitate al membrilor clasei (câmpuri, metode). Accesul la aceștia este restricționat:

  1. În interiorul clasei: Accesul este permis. Membrii protected sunt vizibili din orice loc în interiorul clasei lor.
  2. În clasele moștenitoare: Accesul este permis. Clasele care moștenesc de la o clasă cu membri protected pot accesa direct acești membri, chiar dacă se află într-un alt pachet (în unele limbaje, de exemplu Java).
  3. În același pachet (în unele limbaje, de exemplu Java): Accesul este permis, echivalent cu default (package-private). Membrii protected sunt vizibili pentru toate clasele din același pachet, indiferent de moștenire.
  4. Din exterior (alte pachete, clase care nu moștenesc): Accesul este interzis. Nu este posibilă accesarea directă a membrilor protected din clase care nu moștenesc sau care nu se află în același pachet (Java).

Exemplu (Java):

class BaseClass {
    protected int protectedMember = 10;

    protected void protectedMethod() {
        // Accesul din interiorul clasei este permis
        System.out.println("Metodă protejată din BaseClass");
    }
}

class DerivedClass extends BaseClass {
    void accessProtected() {
        // Accesul din clasa moștenitoare este permis
        System.out.println(protectedMember);
        protectedMethod();
    }
}

class SamePackageClass {
    void accessProtected(BaseClass obj) {
        // În Java, accesul dintr-o altă clasă din același pachet este permis
        System.out.println(obj.protectedMember);
        obj.protectedMethod();
    }
}

class DifferentPackageClass {
    // ...
    // Tentativa de acces va fi o eroare de compilare
    // obj.protectedMember;
    // obj.protectedMethod();
}

Astfel, protected asigură un nivel mai înalt de încapsulare decât public, dar mai scăzut decât private sau default, făcând membrii clasei accesibili pentru moștenitori și, în unele limbaje, pentru clase din același pachet.