Hozzáférés a módosítókhoz Java nyelven

Hozzáférés a módosítókhoz Java nyelven

A Java-ban a hozzáférés-módosítók alapvető eszközök, amelyek meghatározzák, hogy egy osztály tagjai, például a változók metódusai, sőt maga az osztály hogyan érhető el programunk más részeiből.

A Java-ban 4 típusú hozzáférés-módosító érhető el: 

Access-Modifiers-in-Java-1Hozzáférés a módosítókhoz Java nyelven

Privát hozzáférés módosító

A privát hozzáférés módosítója a private kulcsszóval van megadva. A privátként deklarált metódusok vagy adattagok csak abban az osztályban érhetők el, amelyben deklarálták őket.

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

Kimenet
Alice  

Magyarázat: A névhez való közvetlen hozzáférés a beágyazást végrehajtó személyen kívül nem engedélyezett.

Alapértelmezett hozzáférés-módosító

Ha nincs hozzáférésmódosító megadva egy osztálymetódushoz vagy adattaghoz, akkor a rendszer alapértelmezés szerint rendelkezik az alapértelmezett hozzáférés-módosítóval. Ez azt jelenti, hogy csak az azonos csomagon belüli osztályok férhetnek hozzá.

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

Kimenet
Tesla  

Magyarázat: Az alapértelmezett hozzáféréssel rendelkező tagok nem érhetők el más csomagban lévő osztályokból.

Geeks.java: Alapértelmezett osztály ugyanazon a csomagon belül

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

GeeksNew.java: Alapértelmezett osztály egy másik csomagból (a kontraszt kedvéért)

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

Magyarázat:  Ebben a példában a program megmutatja a fordítási idő hibát, amikor egy másik csomagból próbálunk elérni egy alapértelmezett módosító osztályt.

Védett hozzáférés-módosító

A védett hozzáférés módosító a védett kulcsszóval van megadva. A védettnek nyilvánított metódusok vagy adattagok ugyanazon a csomagon vagy alosztályokon belül, különböző csomagokban érhetők el.

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

Kimenet
Access via subclass method: 100 0  

Magyarázat: speed elérhető alosztály metódusokon és más osztályokon keresztül ugyanabban a csomagban, de a közvetlen hozzáférés egy másik csomagból (nem alosztály) meghiúsulna.

Nyilvános hozzáférés módosító

A nyilvános hozzáférés módosító a public kulcsszóval adható meg. A nyilvános tagok a programban mindenhonnan elérhetők. A nyilvános adattagok köre nincs korlátozva.

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

Kimenet
15  

Magyarázat: Az add() globálisan elérhető a nyilvános módosítónak köszönhetően.

A legfelső szintű osztályok vagy interfészek nem deklarálhatók privátként, mert a privát azt jelenti, hogy „csak a körülvevő osztályon belül látható”.

A Java hozzáférés-módosítóinak összehasonlító táblázata

azonos_osztályHozzáférés-módosító

Mikor kell használni az egyes hozzáférés-módosítókat a valós projektekben

  • Magán: Az ötletnek a lehető legkorlátozóbb hozzáférést kell használnia, így a lehető legnagyobb mértékben a privát hozzáférést kell használni.
  • Alapértelmezett (Package-Private): Gyakran használják a csomag-hatókörű segédprogramokban vagy segédosztályokban.
  • Védett: Általánosan használt öröklés alapú tervekben, például keretkiterjesztésekben.
  • Nyilvános : Ez az API-végpontok szolgáltatásosztályaihoz vagy az alkalmazás különböző részei között megosztott segédprogram-metódusokhoz használatos.


Kvíz létrehozása