Модификатори на достъп в 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. Методите или членовете на данните, декларирани като защитени, са достъпни в рамките на един и същи пакет или подкласове в различни пакети.

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() е глобално достъпен благодарение на публичния модификатор.

Класовете или интерфейсите от най-високо ниво не могат да бъдат декларирани като частни, защото частни означава „видими само в рамките на обграждащия клас“.

Сравнителна таблица на модификаторите за достъп в Java

същия_класAccess-Modifier

Кога да използвате всеки модификатор на достъп в проекти от реалния свят

  • Частно: Идеята трябва да се използва възможно най-рестриктивен достъп, така че частният трябва да се използва колкото е възможно повече.
  • По подразбиране (Package-Private): Често се използва в помощни програми с обхват на пакет или помощни класове.
  • Защитено: Често се използва в дизайни, базирани на наследяване, като разширения на рамка.
  • Обществен : Това се използва за класове на обслужване на крайни точки на API или помощни методи, споделени между различни части на приложение.


Създаване на тест