Åtkomstmodifierare i Java

Åtkomstmodifierare i Java

I Java är åtkomstmodifierare viktiga verktyg som definierar hur medlemmarna i en klass gillar variabler metoder och till och med själva klassen kan nås från andra delar av vårt program.

Det finns fyra typer av åtkomstmodifierare tillgängliga i Java: 

Access-Modifiers-i-Java-1Åtkomstmodifierare i Java

Modifierare för privat åtkomst

Modifieraren för privat åtkomst anges med nyckelordet privat. De metoder eller datamedlemmar som deklarerats som privata är endast tillgängliga inom den klass där de deklareras.

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

Produktion
Alice  

Förklaring: Direktåtkomst till namn är inte tillåten utanför Person som upprätthåller inkapsling.

Standardåtkomstmodifierare

När ingen åtkomstmodifierare är specificerad för en klassmetod eller datamedlem sägs den ha standardåtkomstmodifieraren som standard. Detta innebär att endast klasser inom samma paket kan komma åt det.

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

Produktion
Tesla  

Förklaring: Medlemmar med standardåtkomst kan inte nås från klasser i ett annat paket.

Geeks.java: Standardklass inom samma paket

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

GeeksNew.java: Standardklass från ett annat paket (för kontrast)

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

Förklaring:  I det här exemplet kommer programmet att visa kompileringstidsfelet när vi försöker komma åt en standardmodifieringsklass från ett annat paket.

Protected Access Modifier

Modifieraren för skyddad åtkomst anges med nyckelordet protected. Metoderna eller datamedlemmarna som deklarerats som skyddade är tillgängliga inom samma paket eller underklasser i olika paket.

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

Produktion
Access via subclass method: 100 0  

Förklaring: hastighet är tillgänglig via underklassmetoder och andra klasser i samma paket men direkt åtkomst från ett annat paket (icke-underklass) skulle misslyckas.

Public Access Modifier

Modifieraren för offentlig åtkomst anges med nyckelordet public. Offentliga medlemmar är tillgängliga från alla håll i programmet. Det finns ingen begränsning av omfattningen av medlemmar av offentliga uppgifter.

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

Produktion
15  

Förklaring: add() är globalt tillgänglig på grund av den offentliga modifieraren.

Klasser eller gränssnitt på toppnivå kan inte deklareras som privata eftersom privat betyder "endast synlig inom den omslutande klassen".

Jämförelsetabell för åtkomstmodifierare i Java

samma_klassAccess-modifierare

När ska man använda varje åtkomstmodifierare i verkliga projekt

  • Privat: Tanken ska vara att använda så restriktiv tillgång som möjligt så privat ska användas så mycket som möjligt.
  • Standard (Package-Private): Används ofta i paketomfattade verktyg eller hjälpklasser.
  • Skyddad: Används vanligen i arvsbaserade konstruktioner som ramförlängningar.
  • Offentlig : Detta används för API-ändpunkters tjänsteklasser eller verktygsmetoder som delas mellan olika delar av en applikation.


Skapa frågesport