Sobes.tech
Junior

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

sobes.tech AI

AIdan javob

Kirish uchun protected o'zgaruvchisi sinf a'zolarining (maydonlar, metodlar) ko'rinish darajasini belgilaydi. Ularga kirish cheklangan:

  1. Sinf ichida: Kirish ruxsat etilgan. protected a'zolar sinf ichida istalgan joydan ko'rinadi.
  2. Meros olgan sinflarda: Kirish ruxsat etilgan. protected a'zolari bo'lgan sinfdan meros olgan sinflar, hatto boshqa paketda bo'lsa ham, to'g'ridan-to'g'ri ularga murojaat qilishi mumkin (ba'zi tillarda, masalan, Java).
  3. Xuddi shu paketda (ba'zi tillarda, masalan, Java): Kirish ruxsat etilgan, default (paket-private) bilan teng. protected a'zolar, meros olishdan qat'i nazar, shu paketdagi barcha sinflar uchun ko'rinadi.
  4. Tashqaridan (boshqa paketlar, meros olmagan sinflar): Kirish taqiqlangan. protected a'zolarga to'g'ridan-to'g'ri murojaat qilish, meros olmagan yoki shu paketda bo'lmagan sinflardan mumkin emas (Java).

Misol (Java):

class BaseClass {
    protected int protectedMember = 10;

    protected void protectedMethod() {
        // Sinf ichidan kirish ruxsat etilgan
        System.out.println("BaseClass'dan protected metod");
    }
}

class DerivedClass extends BaseClass {
    void accessProtected() {
        // Meros olgan sinfdan kirish ruxsat etilgan
        System.out.println(protectedMember);
        protectedMethod();
    }
}

class SamePackageClass {
    void accessProtected(BaseClass obj) {
        // Java'da, shu paketdagi boshqa sinfdan kirish ruxsat etilgan
        System.out.println(obj.protectedMember);
        obj.protectedMethod();
    }
}

class DifferentPackageClass {
    // ...
    // Kirish urinishlari kompilyatsiya xatosi bilan yakunlanadi
    // obj.protectedMember;
    // obj.protectedMethod();
}

Shunday qilib, protected publicdan yuqori, private yoki defaultdan esa pastroq bo'lib, sinf a'zolari meros oluvchilar va, ba'zi tillarda, shu paketdagi sinflar uchun ochiq bo'ladi.