logo

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-1' title=Modificatori 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_classe' loading='lazy' title=Modificatore 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