Ce sunt modificatorii de acces?

Ați dorit vreodată să definiți cum oamenii ar accesa unele dintre proprietățile dvs.? Nu ai vrea ca cineva să-ți folosească lenjeria intimă. Cu toate acestea, prietenii și rudele apropiate vă pot folosi puloverul și poate mașina.

Similar cu modul în care setați un nivel de acces la pozițiile dvs., Java controlează și accesul. Doriți să definiți nivelul de acces pentru variabile, metode și clase în funcție de ce alte clase doriți să le accesați.

Java oferă 4 niveluri de modificatori de acces. Aceasta înseamnă că puteți modifica accesul la o variabilă, metodă sau clasă în 4 moduri. Aceste 4 moduri sunt private, publice, protejate și implicite.

Acești modificatori de acces pot fi aplicați câmpurilor, metodelor și claselor (clasele sunt un caz special, le vom analiza la sfârșitul acestui articol). Iată o prezentare rapidă1 de ceea ce Access Levels sunt pentru fiecare Access Modifier:

Referință tabel modificatori de acces:

Tabel modificatori de acces

Modificator de acces privat

Permite accesarea unei variabile sau metode numai în clasa în care a fost creată. Nicio altă clasă în afara clasei care a creat variabila sau metoda nu o poate accesa. Acest lucru este foarte asemănător cu organele voastre interne. Acestea sunt accesibile doar proprietarului. Pentru a face o variabilă sau o metodă privată, pur și simplu adăugați cuvântul cheie privat înainte de tipul variabilei sau metodei. Să folosim private într-un exemplu de codare. Dacă o bancă dorește să ofere o rată a dobânzii de 10% pentru împrumuturile sale, s-ar asigura că variabila rată a dobânzii (să presupunem că int int_rate;) ar rămâne privat astfel încât nicio altă clasă să nu încerce să o acceseze și să o schimbe. De exemplu;

private String name;
Exemplul de mai sus creează o variabilă numită nume și se asigură că este accesibilă numai în cadrul clasei din care a fost creată.

Un alt exemplu pentru o metodă este

private void setAge(){
System.out.println("Set Age");
}

Exemplul de mai sus asigură că metoda setAge este accesibilă numai în cadrul clasei din care a fost creată și nicăieri altundeva.

Modificator de acces public

Modificatorul de acces public este opusul direct al modificatorului de acces privat. O clasă, metodă sau variabilă poate fi declarată publică și înseamnă că este accesibilă din orice clasă. Modificatorul de acces public poate fi asemănat cu o școală publică în care oricine poate solicita admiterea și poate fi admis.

O clasă publică, metodă sau variabilă poate fi accesată din orice altă clasă în orice moment.

De exemplu, pentru a declara o clasă publică, tot ce aveți nevoie este:

public class Animal{

}

Ca atare, clasa Animal poate fi accesată de orice altă clasă.

public int age;
public int getAge(){
}

Mai sus sunt modalități de a specifica o variabilă și o metodă ca publice.

Modificatorul de acces implicit

Modificatorul de acces implicit este diferit de toți ceilalți modificatori de acces prin faptul că nu are cuvânt cheie. Pentru a utiliza modificatorul de acces implicit, pur și simplu nu utilizați niciunul dintre ceilalți modificatori de acces și asta înseamnă pur și simplu că utilizați un modificator de acces implicit.

De exemplu, pentru a utiliza modificatorul de acces implicit pentru o clasă, utilizați

class Bird{
}

Aceasta înseamnă practic că utilizați modificatorul de acces implicit. Modificatorul de acces implicit permite accesarea unei variabile, metode sau clase de către alte clase din același pachet. Un pachet este o colecție de clase conexe dintr-un director de fișiere. Pentru mai multe informații despre pachete, consultați secțiunea despre pachete.

Orice variabilă, metodă sau clasă declarată că folosește modificatorul de acces implicit nu poate fi accesată de nicio altă clasă în afara pachetului din care a fost declarat.

int age;
void setNewAge(){
}

Mai sus sunt câteva modalități de utilizare a modificatorului de acces implicit pentru o variabilă sau metodă. Nu uitați, modificatorul implicit de acces nu are un cuvânt cheie. Absența celorlalte 3 modificări de acces înseamnă că utilizați modificatorul de acces implicit.

Modificator de acces protejat

Modificatorul de acces protejat este strâns legat de modificatorul de acces implicit. Modificatorul de acces protejat are proprietățile modificatorului de acces implicit, dar cu puțină îmbunătățire.

O variabilă și o metodă sunt singurele care utilizează modificatorul de acces protejat. Mica îmbunătățire constă în faptul că o clasă din afara pachetului de clase din care a fost declarată variabila sau metoda poate accesa variabila sau metoda menționată. Acest lucru este posibil DOAR dacă moștenește din clasă, totuși.

Clasa dintr-un alt pachet care poate vedea variabile sau metode protejate trebuie să fi extins Clasa care a creat variabilele sau metodele.

Rețineți, fără avantajul Moștenirii, un modificator de acces implicit are exact același acces ca un modificator de acces protejat.

Exemple de utilizare a modificatorului de acces protejat sunt prezentate mai jos:

protected int age;
protected String getName(){
  return "My Name is You";
}

Modificatori de acces pe clase

În mod implicit, clasele pot avea doar 2 modificatori:

  • public
  • fără modificator (modificator implicit)

Deci, acest lucru înseamnă că clasele nu pot fi setate niciodată la private sau protected?

Acest lucru este logic, de ce ai vrea să faci o clasă privată? Nicio altă clasă nu ar putea să o folosească. Dar, uneori, puteți încorpora o clasă într-o altă clasă. Aceste clase speciale, inner classes, poate fi setat la privat sau protejat astfel încât doar clasa sa din jur să îl poată accesa:

public class Car {
    private String brand;
    private Engine engine;
    // ...    
    private class Engine {
        // ...
    }
}

În exemplul de mai sus, numai Car clasa poate folosi Engineclasă. Acest lucru poate fi util în unele cazuri.

Alte clase nu pot fi setate niciodată la protected sau private, pentru că nu are sens. protectedmodificatorul de acces este folosit pentru a face lucruri package-private dar cu opțiunea de a fi accesibil subclaselor. Nu există un concept precum „subpachete” sau „pachet-moștenire” în java.