A Java-ban a hozzáférés-módosítók alapvető eszközök, amelyek meghatározzák, hogy egy osztály tagjai, például a változók metódusai, sőt maga az osztály hogyan érhető el programunk más részeiből.
A Java-ban 4 típusú hozzáférés-módosító érhető el:
Hozzáférés a módosítókhoz Java nyelvenPrivát hozzáférés módosító
A privát hozzáférés módosítója a private kulcsszóval van megadva. A privátként deklarált metódusok vagy adattagok csak abban az osztályban érhetők el, amelyben deklarálták őket.
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()); } }
Kimenet
Alice
Magyarázat: A névhez való közvetlen hozzáférés a beágyazást végrehajtó személyen kívül nem engedélyezett.
Alapértelmezett hozzáférés-módosító
Ha nincs hozzáférésmódosító megadva egy osztálymetódushoz vagy adattaghoz, akkor a rendszer alapértelmezés szerint rendelkezik az alapértelmezett hozzáférés-módosítóval. Ez azt jelenti, hogy csak az azonos csomagon belüli osztályok férhetnek hozzá.
Javaclass 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); } }
Kimenet
Tesla
Magyarázat: Az alapértelmezett hozzáféréssel rendelkező tagok nem érhetők el más csomagban lévő osztályokból.
Geeks.java: Alapértelmezett osztály ugyanazon a csomagon belül
Java// default access modifier package p1; // Class Geek is having // Default access modifier class Geek { void display() { System.out.println('Hello World!'); } }
GeeksNew.java: Alapértelmezett osztály egy másik csomagból (a kontraszt kedvéért)
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(); } }
Magyarázat: Ebben a példában a program megmutatja a fordítási idő hibát, amikor egy másik csomagból próbálunk elérni egy alapértelmezett módosító osztályt.
Védett hozzáférés-módosító
A védett hozzáférés módosító a védett kulcsszóval van megadva. A védettnek nyilvánított metódusok vagy adattagok ugyanazon a csomagon vagy alosztályokon belül, különböző csomagokban érhetők el.
Javaclass 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); } }
Kimenet
Access via subclass method: 100 0
Magyarázat: speed elérhető alosztály metódusokon és más osztályokon keresztül ugyanabban a csomagban, de a közvetlen hozzáférés egy másik csomagból (nem alosztály) meghiúsulna.
Nyilvános hozzáférés módosító
A nyilvános hozzáférés módosító a public kulcsszóval adható meg. A nyilvános tagok a programban mindenhonnan elérhetők. A nyilvános adattagok köre nincs korlátozva.
Javaclass 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 } }
Kimenet
15
Magyarázat: Az add() globálisan elérhető a nyilvános módosítónak köszönhetően.
A legfelső szintű osztályok vagy interfészek nem deklarálhatók privátként, mert a privát azt jelenti, hogy „csak a körülvevő osztályon belül látható”.
A Java hozzáférés-módosítóinak összehasonlító táblázata
Hozzáférés-módosítóMikor kell használni az egyes hozzáférés-módosítókat a valós projektekben
- Magán: Az ötletnek a lehető legkorlátozóbb hozzáférést kell használnia, így a lehető legnagyobb mértékben a privát hozzáférést kell használni.
- Alapértelmezett (Package-Private): Gyakran használják a csomag-hatókörű segédprogramokban vagy segédosztályokban.
- Védett: Általánosan használt öröklés alapú tervekben, például keretkiterjesztésekben.
- Nyilvános : Ez az API-végpontok szolgáltatásosztályaihoz vagy az alkalmazás különböző részei között megosztott segédprogram-metódusokhoz használatos.