logo

Modificatori de acces în Java

În Java, modificatorii de acces sunt instrumente esențiale care definesc modul în care membrii unei clase precum metodele variabilelor și chiar clasa în sine pot fi accesate din alte părți ale programului nostru.

Există 4 tipuri de modificatori de acces disponibile în Java: 

Access-Modifiers-in-Java-1' title=Modificatori de acces în Java

Modificator de acces privat

Modificatorul de acces privat este specificat folosind cuvântul cheie privat. Metodele sau membrii datelor declarați ca private sunt accesibile numai în cadrul clasei în care sunt declarați.



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

Ieșire
Alice 

Explicaţie: Accesul direct la nume nu este permis în afara Persoanei care impune încapsularea.

Modificator de acces implicit

Când nu este specificat nici un modificator de acces pentru o metodă de clasă sau un membru de date, se spune că are modificatorul de acces implicit în mod implicit. Aceasta înseamnă că numai clasele din același pachet îl pot accesa.

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

Ieșire
Tesla 

Explicaţie: Membrii cu acces implicit nu pot fi accesați din clase dintr-un pachet diferit.

Geeks.java: Clasa implicită în același pachet

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

GeeksNew.java: Clasa implicită dintr-un pachet diferit (pentru contrast)

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

Explicaţie:  În acest exemplu, programul va afișa eroarea de compilare atunci când încercăm să accesăm o clasă modificatoare implicită dintr-un pachet diferit.

Modificator de acces protejat

Modificatorul de acces protejat este specificat folosind cuvântul cheie protected. Metodele sau membrii datelor declarați ca protejați sunt accesibile în cadrul aceluiași pachet sau subclase în pachete diferite.

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

Ieșire
Access via subclass method: 100 0 

Explicaţie: viteza este accesibilă prin metode de subclasă și alte clase din același pachet, dar accesul direct dintr-un pachet diferit (non-subclasă) ar eșua.

Modificator de acces public

Modificatorul de acces public este specificat folosind cuvântul cheie public. Membrii publici sunt accesibili de oriunde în program. Nu există nicio restricție privind sfera de aplicare a membrilor datelor publice.

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

Ieșire
15 

Explicaţie: add() este accesibil la nivel global datorită modificatorului public.

Clasele sau interfețele de nivel superior nu pot fi declarate ca private, deoarece private înseamnă „vizibile doar în cadrul clasei care le înconjoară”.

Tabel de comparație a modificatorilor de acces în Java

aceeași_clasă' loading='lazy' title=Modificator de acces

Când să utilizați fiecare modificator de acces în proiectele din lumea reală

  • Privat: Ideea ar trebui să fie folosirea accesului cât mai restrictiv posibil, astfel încât privatul să fie folosit cât mai mult posibil.
  • Implicit (Pachet-Privat): Adesea folosit în utilități sau clase de ajutor pentru pachet.
  • Protejat: Folosit în mod obișnuit în proiectele bazate pe moștenire, cum ar fi extensiile de cadru.
  • Public : Acesta este utilizat pentru clasele de servicii ale punctelor finale API sau metodele utilitare partajate în diferite părți ale unei aplicații.


Creați un test