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

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

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

У Java є 4 типи модифікаторів доступу: 

Access-Modifiers-in-Java-1Модифікатори доступу в Java

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

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

Java
   class   Person     {      // private variable      private     String     name  ;      public     void     setName  (  String     name  )     {      this  .  name     =     name  ;     // accessible within class      }      public     String     getName  ()     {     return     name  ;     }   }   public     class   Geeks     {      public     static     void     main  (  String  []     args  )      {      Person     p     =     new     Person  ();      p  .  setName  (  'Alice'  );      // System.out.println(p.name); // Error: 'name'      // has private access      System  .  out  .  println  (  p  .  getName  ());      }   }   

Вихід
Alice  

Пояснення: Прямий доступ до імені не дозволяється за межами Особи, яка виконує інкапсуляцію.

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

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

Java
   class   Car     {      String     model  ;     // default access   }   public     class   Main     {          public     static     void     main  (  String  []     args  ){          Car     c     =     new     Car  ();      c  .  model     =     'Tesla'  ;     // accessible within the same package      System  .  out  .  println  (  c  .  model  );      }   }   

Вихід
Tesla  

Пояснення: Члени з доступом за умовчанням не можуть бути доступні з класів в іншому пакеті.

Geeks.java: Клас за замовчуванням в одному пакеті

Java
   // default access modifier    package     p1  ;      // Class Geek is having    // Default access modifier    class   Geek      {         void     display  ()         {         System  .  out  .  println  (  'Hello World!'  );         }      }   

GeeksNew.java: Типовий клас з іншого пакету (для контрасту)

C++
   // package with default modifier    package     p2  ;      import     p1  .  *  ;     // importing package p1   // This class is having    // default access modifier    class     GeekNew     {         public     static     void     main  (  String     args  [])     {             // Accessing class Geek from package p1       Geek     o     =     new     Geek  ();         o  .  display  ();         }      }   

Пояснення:  У цьому прикладі програма покаже помилку під час компіляції, коли ми спробуємо отримати доступ до класу модифікатора за замовчуванням з іншого пакету.

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

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

Java
   class   Vehicle     {      protected     int     speed  ;     // protected member   }   class   Bike     extends     Vehicle     {      void     setSpeed  (  int     s  )      {      speed     =     s  ;     // accessible in subclass      }      int     getSpeed  ()      {      return     speed  ;     // accessible in subclass      }   }   public     class   Main     {      public     static     void     main  (  String  []     args  ){          Bike     b     =     new     Bike  ();      b  .  setSpeed  (  100  );      System  .  out  .  println  (  'Access via subclass method: '      +     b  .  getSpeed  ());      Vehicle     v     =     new     Vehicle  ();      System  .  out  .  println  (  v  .  speed  );      }   }   

Вихід
Access via subclass method: 100 0  

Пояснення: швидкість доступна через методи підкласу та інші класи в тому ж пакеті, але прямий доступ з іншого пакету (не підкласу) не вдасться.

Модифікатор публічного доступу

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

Java
   class   MathUtils     {             public     static     int     add  (  int     a       int     b  )     {      return     a     +     b  ;      }   }   public     class   Main     {          public     static     void     main  (  String  []     args  )     {          System  .  out  .  println  (  MathUtils  .  add  (  5       10  ));     // accessible anywhere      }   }   

Вихід
15  

Пояснення: add() доступний глобально завдяки модифікатору public.

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

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

той самий_класМодифікатор доступу

Коли використовувати кожен модифікатор доступу в реальних проектах

  • Приватний: Ідея повинна полягати в тому, щоб використовувати максимально обмежений доступ, тому приватний слід використовувати якомога більше.
  • За замовчуванням (Package-Private): часто використовується в пакетних утилітах або допоміжних класах.
  • Захищено: Зазвичай використовується в дизайнах на основі успадкування, таких як розширення фреймворку.
  • Громадський : це використовується для класів обслуговування кінцевих точок API або службових методів, які спільно використовуються в різних частинах програми.


Створіть вікторину