Специфікатори доступу на Java: У Java існує чотири специфікатори доступу, а саме приватний, пакет-приватний (за замовчуванням), захищений та загальнодоступний у порядку збільшення доступу.
Приватне : Коли ви розробляєте якийсь клас і хочете, щоб член цього класу не знаходився за межами цього класу, тоді слід оголосити його приватним. приватні члени можуть мати доступ лише в класі, де вони визначені, тобто клас, що додається. приватні члени можуть звертатися за посиланням "це", а також в інших примірниках класу, що охоплює цих членів, але тільки в межах визначення цього класу.
Пакет-приватний (за замовчуванням) : Цей специфікатор доступу надаватиме доступ, визначений приватним специфікатором доступу, крім доступу, описаного нижче.
Коли ви розробляєте якийсь пакет, а отже, і якийсь клас (скажімо, Class1) всередині нього, ви можете використовувати специфікатор доступу за замовчуванням (не потрібно чітко згадувати), щоб викрити члена в класі до інших класів у вашому (тому ж) пакеті. У цих інших класах (в межах одного пакету) ви можете отримати доступ до цих членів за замовчуванням, наприклад, Class1. Крім того, ви можете отримати доступ до цих членів за замовчуванням у підкласах Class1, скажімо, Class2 (у цій посиланні або в екземплярі Class1 або в екземплярі Class2).
В основному, в рамках одного пакету ви можете отримати доступ до стандартних членів, наприклад, безпосередньо за класом або за посиланням 'this' у підкласах.
захищено : Цей специфікатор доступу забезпечить доступ, визначений специфікатором доступу приватного пакета на додаток до описаного нижче доступу.
Коли ви розробляєте якийсь пакет, а отже, і якийсь клас (скажімо, Class1) в ньому, вам слід використовувати захищений специфікатор доступу для члена даних класу Class1, якщо ви не хочете, щоб цей член отримав доступ поза вашим пакетом (скажімо, в пакеті споживача ваш пакет, тобто клієнт, який використовує ваші API), але ви хочете зробити виняток і дозволити доступ до цього члена лише в тому випадку, якщо клієнт пише клас скажіть Class2, який розширює Class1. Таким чином, як правило, захищені члени будуть доступні за посиланням "це" у похідних класах, тобто Class2, а також у явних екземплярах Class2.
Будь ласка, запиши:
- Ви не зможете отримати доступ до успадкованого захищеного члена Class1 у Class2, якщо ви спробуєте отримати доступ до нього в явному екземплярі Class1, хоча він успадкований у ньому.
- Коли ви пишете інший клас Class3 в межах одного / іншого пакету, що розширює Class2, захищений член від Class1 буде доступний у цій посиланні, а також у явній інстанції Class3. Це буде справедливо для будь-якої розширеної ієрархії, тобто захищений член все ще буде доступний у цій посиланні або екземплярі розширеного класу. Зауважте, що в Class3, якщо ви створюєте екземпляр Class2, ви не зможете отримати доступ до захищеного члена з Class1, хоча він успадковується.
Отже, підсумковий рядок полягає в тому, що до захищених членів можна отримати доступ до інших пакетів, лише якщо якийсь клас із цього іншого пакету поширює клас, що охоплює цей захищений член, і доступ до захищеного члена отримує доступ до "цього" посилання або явних екземплярів розширеного класу в межах визначення розширеного клас.
public : Цей специфікатор доступу надаватиме доступ, визначений захищеним специфікатором доступу, крім доступу, описаного нижче.
Коли ви розробляєте який-небудь пакет, а отже, і якийсь клас (скажімо, Class1) всередині нього, вам слід використовувати загальнодоступний специфікатор доступу для члена даних в Class1, якщо ви хочете, щоб цей член був доступний в інших пакетах, наприклад, Class1, створеному в якомусь іншому класі пакет. В основному цей специфікатор доступу слід використовувати, коли ви маєте намір викрити свого члена даних у світі без будь-яких умов.
private
ховається від інших класів в межах пакету.public
піддається заняттям поза пакетом.protected
- версія,public
обмежена лише підкласами.