Modificatori di accesso in Java

Modificatori di accesso in Java

In Java i modificatori di accesso sono strumenti essenziali che definiscono il modo in cui i membri di una classe come i metodi variabili e persino la classe stessa sono accessibili da altre parti del nostro programma.

In Java sono disponibili 4 tipi di modificatori di accesso: 

Modificatori-di-accesso-in-Java-1Modificatori di accesso in Java

Modificatore di accesso privato

Il modificatore di accesso privato viene specificato utilizzando la parola chiave private. I metodi o i membri dati dichiarati come privati ​​sono accessibili solo all'interno della classe in cui sono dichiarati.

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

Produzione
Alice  

Spiegazione: L'accesso diretto al nome non è consentito all'esterno della Persona che applica l'incapsulamento.

Modificatore di accesso predefinito

Quando non viene specificato alcun modificatore di accesso per un metodo di classe o un membro dati, si dice che abbia il modificatore di accesso predefinito per impostazione predefinita. Ciò significa che solo le classi all'interno dello stesso pacchetto possono accedervi.

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

Produzione
Tesla  

Spiegazione: I membri con accesso predefinito non possono accedere dalle classi di un pacchetto diverso.

Geeks.java: Classe predefinita all'interno dello stesso pacchetto

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

GeeksNew.java: Classe predefinita da un pacchetto diverso (per contrasto)

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

Spiegazione:  In questo esempio il programma mostrerà l'errore in fase di compilazione quando proviamo ad accedere a una classe modificata predefinita da un pacchetto diverso.

Modificatore di accesso protetto

Il modificatore di accesso protetto viene specificato utilizzando la parola chiave protected. I metodi o i membri dati dichiarati come protetti sono accessibili all'interno dello stesso pacchetto o sottoclassi in pacchetti diversi.

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

Produzione
Access via subclass method: 100 0  

Spiegazione: speed è accessibile tramite metodi di sottoclasse e altre classi nello stesso pacchetto, ma l'accesso diretto da un pacchetto diverso (non sottoclasse) fallirebbe.

Modificatore di accesso pubblico

Il modificatore di accesso pubblico viene specificato utilizzando la parola chiave public. I membri pubblici sono accessibili da qualsiasi punto del programma. Non esiste alcuna restrizione sull'ambito dei membri dei dati pubblici.

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

Produzione
15  

Spiegazione: add() è accessibile a livello globale grazie al modificatore public.

Le classi o le interfacce di livello superiore non possono essere dichiarate private perché privato significa "visibile solo all'interno della classe che le racchiude".

Tabella comparativa dei modificatori di accesso in Java

stessa_classeModificatore di accesso

Quando utilizzare ciascun modificatore di accesso nei progetti del mondo reale

  • Privato: L'idea dovrebbe essere quella di utilizzare un accesso il più restrittivo possibile, quindi il privato dovrebbe essere utilizzato il più possibile.
  • Predefinito (Package-Private): spesso utilizzato in utilità con ambito pacchetto o classi helper.
  • Protetto: Comunemente utilizzato nei progetti basati sull'ereditarietà come le estensioni del framework.
  • Pubblico : viene utilizzato per le classi di servizio degli endpoint API o i metodi di utilità condivisi tra diverse parti di un'applicazione.


Crea quiz