Junior
Как работает модификатор доступа protected в языках программирования?
sobes.tech AI
Ҷавоб аз AI
Модификатори дастрасӣ protected дараҷаи намоёнӣ (виду, методҳо) дар узвҳои синфро муайян мекунад. Дастрасӣ ба онҳо маҳдуд аст:
- Дар дохили синф: Дастрасӣ иҷозат дода шудааст. Узвҳои
protectedаз ҳар ҷое дар дохили синфи худ дида мешаванд. - Дар синфҳои меросӣ: Дастрасӣ иҷозат дода шудааст. Синфҳое, ки аз синфи бо узвҳои
protectedмерос мегиранд, метавонанд мустақиман ба ин узвҳо дастрасӣ пайдо кунанд, ҳатто агар дар пакети дигар бошанд (дар баъзе забонҳо, масалан, Java). - Дар дохили ҳамон пакет (дар баъзе забонҳо, масалан, Java): Дастрасӣ иҷозат дода шудааст, баробар бо
default(пакет-ҳифзшуда). Узвҳоиprotectedбарои ҳама синфҳо дар ҳамон пакети, новобаста аз мерос, дида мешаванд. - Аз берун (пакетҳои дигар, синфҳое, ки мерос намебаранд): Дастрасӣ манъ аст. Дастрасии мустақим ба узвҳои
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, ва узвҳои синфро барои меросгирандагон ва дар баъзе забонҳо барои синфҳо дар ҳамон пакет дастрас месозад.