Sobes.tech
Junior

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

sobes.tech AI

Ҷавоб аз AI

Модификатори дастрасӣ protected дараҷаи намоёнӣ (виду, методҳо) дар узвҳои синфро муайян мекунад. Дастрасӣ ба онҳо маҳдуд аст:

  1. Дар дохили синф: Дастрасӣ иҷозат дода шудааст. Узвҳои protected аз ҳар ҷое дар дохили синфи худ дида мешаванд.
  2. Дар синфҳои меросӣ: Дастрасӣ иҷозат дода шудааст. Синфҳое, ки аз синфи бо узвҳои protected мерос мегиранд, метавонанд мустақиман ба ин узвҳо дастрасӣ пайдо кунанд, ҳатто агар дар пакети дигар бошанд (дар баъзе забонҳо, масалан, Java).
  3. Дар дохили ҳамон пакет (дар баъзе забонҳо, масалан, Java): Дастрасӣ иҷозат дода шудааст, баробар бо default (пакет-ҳифзшуда). Узвҳои 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, ва узвҳои синфро барои меросгирандагон ва дар баъзе забонҳо барои синфҳо дар ҳамон пакет дастрас месозад.