Sobes.tech
Junior

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

sobes.tech AI

Отговор от AI

Модификаторът за достъп protected определя нивото на видимост на членовете на класа (поля, методи). Достъпът до тях е ограничен:

  1. Вътре в класа: Достъпът е разрешен. Членовете protected са видими от всяко място вътре в своя клас.
  2. В наследяващите класове: Достъпът е разрешен. Класовете, които наследяват от клас с членове protected, могат директно да се обръщат към тези членове, дори ако са в друг пакет (в някои езици, например Java).
  3. В рамките на същия пакет (в някои езици, например Java): Достъпът е разрешен, еквивалентен на default (package-private). Членовете protected са видими за всички класове в същия пакет, независимо от наследяването.
  4. От вън (други пакети, класове, които не наследяват): Достъпът е забранен. Не е възможно директно да се достъпват protected членове от класове, които не наследяват или не са в същия пакет (Java).

Пример (Java):

class BaseClass {
    protected int protectedMember = 10;

    protected void protectedMethod() {
        // Достъпът от вътре в класа е разрешен
        System.out.println("Защитен метод от BaseClass");
    }
}

class DerivedClass extends BaseClass {
    void accessProtected() {
        // Достъпът от наследяващ клас е разрешен
        System.out.println(protectedMember);
        protectedMethod();
    }
}

class SamePackageClass {
    void accessProtected(BaseClass obj) {
        // В Java, достъпът от друг клас в същия пакет е разрешен
        System.out.println(obj.protectedMember);
        obj.protectedMethod();
    }
}

class DifferentPackageClass {
    // ...
    // Опитът за достъп ще бъде грешка при компилация
    // obj.protectedMember;
    // obj.protectedMethod();
}

По този начин, protected осигурява по-високо ниво на инкапсулация от public, но по-ниско от private или default, като прави членовете на класа достъпни за наследниците и, в някои езици, за класове в същия пакет.