Sobes.tech
Junior

Jak działa modyfikator dostępu 'protected' w językach programowania?

sobes.tech AI

Odpowiedź od AI

Modyfikator dostępu protected zapewnia dostęp do członka klasy (pola, metody lub właściwości) z:

  • Samej klasy, w której ten członek jest zadeklarowany.
  • Klas dziedziczących (podklas).
  • W niektórych językach (np. Java) - ze wszystkich klas w tym samym pakiecie.

Zastosowanie w zależności od języka:

  • Java: Dostępny w obrębie pakietu i w klasach dziedziczących z dowolnego pakietu.
  • C#: Dostępny w obrębie klasy i w klasach dziedziczących. Istnieje również kombinacja protected internal, która zapewnia dostęp w obrębie zestawu i w klasach dziedziczących (w tym w klasach dziedziczących w innych zestawach).
  • C++: Dostępny w obrębie klasy i w klasach dziedziczących.
  • Python: Nie ma ścisłego protected. Członkowie przeznaczeni do ochrony są zwykle nazywani z prefiksem pojedynczego podkreślenia (_), co jest konwencją, a nie ścisłym ograniczeniem dostępu.

Przykład (Java):

class Parent {
    protected int protectedField;

    protected void protectedMethod() {
        // ...
    }
}

class Child extends Parent {
    public void accessProtected() {
        this.protectedField = 10; // Dostęp z klasy dziedziczącej
        this.protectedMethod(); // Dostęp z klasy dziedziczącej
    }
}

class AnotherClassInSamePackage {
    public void accessProtected(Parent p) {
        p.protectedField = 20; // Dostęp z tego samego pakietu
        p.protectedMethod();   // Dostęp z tego samego pakietu
    }
}

class AnotherClassInDifferentPackage {
    // Nie ma bezpośredniego dostępu do członków protected
    // chyba że jest to klasa dziedzicząca
}

protected jest szeroko stosowany do realizacji dziedziczenia, umożliwiając klasom dziedziczącym rozszerzanie funkcjonalności klasy bazowej, jednocześnie ukrywając wewnętrzne szczegóły ich interakcji przed światem zewnętrznym.