Modyfikatory dostępu w Javie

Modyfikatory dostępu w Javie

W Javie modyfikatory dostępu są niezbędnymi narzędziami, które definiują sposób, w jaki członkowie klasy, np. metody zmiennych, a nawet sama klasa, będą dostępne z innych części naszego programu.

W Javie dostępne są 4 typy modyfikatorów dostępu: 

Modyfikatory dostępu w Javie-1Modyfikatory dostępu w Javie

Modyfikator dostępu prywatnego

Modyfikator dostępu prywatnego jest określany za pomocą słowa kluczowego private. Metody lub elementy danych zadeklarowane jako prywatne są dostępne tylko w klasie, w której zostały zadeklarowane.

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  ());      }   }   

Wyjście
Alice  

Wyjaśnienie: Bezpośredni dostęp do nazwy nie jest dozwolony poza osobą wymuszającą enkapsulację.

Domyślny modyfikator dostępu

Jeśli dla metody klasy lub elementu danych nie określono żadnego modyfikatora dostępu, mówi się, że domyślnie ma on domyślny modyfikator dostępu. Oznacza to, że dostęp do niego mają tylko klasy w tym samym pakiecie.

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  );      }   }   

Wyjście
Tesla  

Wyjaśnienie: Nie można uzyskać dostępu do członków z dostępem domyślnym z klas w innym pakiecie.

Geeks.java: Domyślna klasa w tym samym pakiecie

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

GeeksNew.java: Domyślna klasa z innego pakietu (dla kontrastu)

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  ();         }      }   

Wyjaśnienie:  W tym przykładzie program wyświetli błąd kompilacji, gdy spróbujemy uzyskać dostęp do domyślnej klasy modyfikatora z innego pakietu.

Chroniony modyfikator dostępu

Modyfikator dostępu chronionego jest określany przy użyciu słowa kluczowego chronione. Metody lub elementy danych zadeklarowane jako chronione są dostępne w ramach tego samego pakietu lub podklas w różnych pakietach.

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  );      }   }   

Wyjście
Access via subclass method: 100 0  

Wyjaśnienie: speed jest dostępny poprzez metody podklas i inne klasy w tym samym pakiecie, ale bezpośredni dostęp z innego pakietu (niebędącego podklasą) zakończyłby się niepowodzeniem.

Modyfikator dostępu publicznego

Modyfikator dostępu publicznego jest określany za pomocą słowa kluczowego public. Członkowie publiczni są dostępni z każdego miejsca w programie. Nie ma ograniczeń co do zakresu członków danych publicznych.

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      }   }   

Wyjście
15  

Wyjaśnienie: add() jest dostępna globalnie dzięki modyfikatorowi public.

Klasy lub interfejsy najwyższego poziomu nie mogą być zadeklarowane jako prywatne, ponieważ prywatne oznaczają „widoczne tylko w otaczającej je klasie”.

Tabela porównawcza modyfikatorów dostępu w Javie

ta sama_klasaModyfikator dostępu

Kiedy używać każdego modyfikatora dostępu w projektach w świecie rzeczywistym

  • Prywatny: Pomysł powinien polegać na możliwie jak najbardziej restrykcyjnym dostępie, dlatego prywatny powinien być używany w jak największym stopniu.
  • Domyślny (Pakiet prywatny): Często używany w narzędziach o zasięgu pakietu lub klasach pomocniczych.
  • Chroniony: Powszechnie stosowane w projektach opartych na dziedziczeniu, takich jak rozszerzenia frameworka.
  • Publiczny : Jest używany w przypadku klas usług punktów końcowych API lub metod narzędziowych współdzielonych w różnych częściach aplikacji.


Utwórz quiz