Пояснення до модифікаторів доступу на Java

Що таке модифікатори доступу?

Ви коли-небудь хотіли визначити, як люди отримуватимуть доступ до деяких ваших об'єктів? Ви не хотіли б, щоб хтось використовував вашу нижню білизну. Однак ваші близькі друзі та родичі можуть використовувати ваш светр і, можливо, вашу машину.

Подібно до того, як ви встановлюєте рівень доступу до своїх властивостей, Java також контролює доступ. Ви хочете визначити рівень доступу для змінних, методів та класів залежно від того, до яких інших класів ви хочете отримати доступ.

Java надає 4 рівні модифікаторів доступу. Це означає, що ви можете змінити доступ до змінної, методу або класу 4 способами. Ці 4 способи є приватними, загальнодоступними, захищеними та типовими.

Ці модифікатори доступу можна застосовувати до полів, методів та класів (Класи - це особливий випадок, ми розглянемо їх наприкінці цього статті). Ось короткий огляд1 того, що Access Levelsє для кожного Access Modifier:

Посилання на таблицю модифікаторів доступу:

Таблиця модифікаторів доступу

Модифікатор приватного доступу

Дозволяє доступ до змінної чи методу лише в класі, у якому вона була створена. Жоден інший клас, крім класу, який створив змінну або метод, не може отримати до неї доступ. Це дуже схоже на ваші внутрішні органи. Вони доступні лише власнику. Щоб зробити змінну або метод приватним, ви просто додаєте ключове слово private перед змінною або типом методу. Використовуймо private в прикладі кодування. Якщо банк хоче надати 10% відсоткової ставки за своїми позиками, він би переконався, що змінна процентної ставки (припустимо int int_rate;) буде залишатися приватною, оскільки жоден інший клас не намагатиметься отримати до неї доступ та змінити її. Наприклад;

private String name;

Наведений вище приклад створює змінну з назвою name та гарантує, що вона доступна лише в класі, з якого вона була створена.

Іншим прикладом методу є

private void setAge(){ System.out.println("Set Age"); }

Наведений приклад гарантує, що метод setAge доступний лише в класі, з якого він був створений, і ніде більше.

Модифікатор громадського доступу

Модифікатор загального доступу є прямою протилежністю модифікатору приватного доступу. Клас, метод або змінну можна оголосити загальнодоступними, і це означає, що вони доступні з будь-якого класу. Модифікатор громадського доступу можна уподібнити державній школі, де кожен може попросити вступ і бути прийнятим.

Відкритий клас, метод або змінна можна отримати доступ з будь-якого іншого класу в будь-який час.

Наприклад, щоб оголосити клас загальнодоступним, потрібно лише:

public class Animal{ }

Таким чином, до класу Animal може отримати доступ будь-який інший клас.

public int age; public int getAge(){ }

Вище є способи вказівки змінної та методу як загальнодоступних.

Модифікатор доступу за замовчуванням

Модифікатор доступу за замовчуванням відрізняється від усіх інших модифікаторів доступу тим, що не має ключового слова. Щоб використовувати модифікатор доступу за замовчуванням, ви просто не використовуєте жодного з інших модифікаторів доступу, і це просто означає, що ви використовуєте модифікатор доступу за замовчуванням.

Наприклад, щоб використовувати модифікатор доступу за замовчуванням для класу, який ви використовуєте

class Bird{ }

Це в основному означає, що ви використовуєте модифікатор доступу за замовчуванням. Модифікатор доступу за замовчуванням дозволяє змінним, методу або класу бути доступними для інших класів у тому самому пакеті. Пакет - це сукупність пов'язаних класів у каталозі файлів. Для отримання додаткової інформації про пакунки перегляньте розділ про пакунки.

Будь-яка змінна, метод або клас, оголошені для використання модифікатора доступу за замовчуванням, не можуть отримати доступ до будь-якого іншого класу поза пакетом, з якого він був оголошений.

int age; void setNewAge(){ }

Вище є кілька способів використання модифікатора доступу за замовчуванням для змінної чи методу. Не забувайте, що модифікатор доступу за замовчуванням не має ключового слова. Відсутність 3 інших модифікаторів доступу означає, що ви використовуєте модифікатор доступу за замовчуванням.

Модифікатор захищеного доступу

Модифікатор захищеного доступу тісно пов'язаний із модифікатором доступу за замовчуванням. Модифікатор захищеного доступу має властивості модифікатора доступу за замовчуванням, але з невеликим вдосконаленням.

Змінна та метод - єдині, хто використовує модифікатор захищеного доступу. Невелике вдосконалення полягає в тому, що клас поза пакетом класів, з якого оголошена змінна або метод, може отримати доступ до зазначеної змінної чи методу. Однак це можливо ТІЛЬКИ якщо воно успадковується від Класу.

Клас з іншого пакету, який може бачити захищені змінні або методи, повинен мати розширений клас, який створив змінні або методи.

Зверніть увагу, без переваги спадщини, модифікатор доступу за замовчуванням має точно такий самий доступ, як і захищений модифікатор доступу.

Приклади використання модифікатора захищеного доступу показані нижче:

protected int age; protected String getName(){ return "My Name is You"; }

Модифікатори доступу до класів

За замовчуванням класи можуть мати лише 2 модифікатори:

  • громадськості
  • немає модифікатора (модифікатор за замовчуванням)

Так що це означає класи ніколи не можуть бути встановлені privateабо protected?

Це логічно, чому ви хочете зробити приватний клас? Жоден інший клас не зміг би ним скористатися. Але іноді ви можете вбудувати клас в інший клас. Ці спеціальні класи, inner classesможна встановити як приватні або захищені, так що доступ до них має лише оточуючий клас:

public class Car { private String brand; private Engine engine; // ... private class Engine { // ... } }

У наведеному вище прикладі Carклас може використовувати лише Engineклас. Це може бути корисним у деяких випадках.

Для інших класів ніколи не можна встановити значення protectedабо private, оскільки це не має сенсу. protectedДоступу модифікатора використовується , щоб зробити речі , package-privateале з можливістю бути доступною для підкласів. У Java немає такого поняття, як "підпакети" або "успадкування пакетів".