V Jave sú k dispozícii 4 typy modifikátorov prístupu:
Modifikátory prístupu v jazyku JavaModifikátor súkromného prístupu
Modifikátor súkromného prístupu sa špecifikuje pomocou kľúčového slova private. Metódy alebo údajové členy deklarované ako súkromné sú prístupné iba v rámci triedy, v ktorej sú deklarované.
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()); } }
Výstup
Alice
Vysvetlenie: Priamy prístup k menu nie je povolený zvonku Osoba presadzujúca zapuzdrenie.
Predvolený modifikátor prístupu
Keď nie je špecifikovaný žiadny modifikátor prístupu pre metódu triedy alebo údajový člen, hovorí sa, že má štandardne predvolený modifikátor prístupu. To znamená, že k nemu majú prístup iba triedy v rámci toho istého balíka.
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); } }
Výstup
Tesla
Vysvetlenie: K členom s predvoleným prístupom nie je možné pristupovať z tried v inom balíku.
Geeks.java: Predvolená trieda v rámci toho istého balíka
Java// default access modifier package p1; // Class Geek is having // Default access modifier class Geek { void display() { System.out.println('Hello World!'); } }
GeeksNew.java: Predvolená trieda z iného balíka (pre kontrast)
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(); } }
Vysvetlenie: V tomto príklade program zobrazí chybu pri kompilácii, keď sa pokúsime získať prístup k predvolenej triede modifikátorov z iného balíka.
Modifikátor chráneného prístupu
Modifikátor chráneného prístupu je špecifikovaný pomocou kľúčového slova protected. Metódy alebo dátové členy deklarované ako chránené sú prístupné v rámci rovnakého balíka alebo podtried v rôznych balíkoch.
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); } }
Výstup
Access via subclass method: 100 0
Vysvetlenie: rýchlosť je prístupná prostredníctvom metód podtriedy a iných tried v rovnakom balíku, ale priamy prístup z iného balíka (nie podtriedy) by zlyhal.
Modifikátor verejného prístupu
Modifikátor verejného prístupu sa špecifikuje pomocou kľúčového slova public. Verejní členovia sú prístupní odkiaľkoľvek v programe. Neexistuje žiadne obmedzenie rozsahu členov s verejnými údajmi.
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 } }
Výstup
15
Vysvetlenie: add() je globálne prístupné vďaka modifikátoru public.
Triedy alebo rozhrania najvyššej úrovne nemožno deklarovať ako súkromné, pretože súkromné znamená „viditeľné iba v rámci obklopujúcej triedy“.
Porovnávacia tabuľka modifikátorov prístupu v Jave
Access-ModifierKedy použiť každý modifikátor prístupu v projektoch skutočného sveta
- Súkromné: Myšlienkou by malo byť použitie čo najobmedzujúceho prístupu, takže súkromný by sa mal využívať čo najviac.
- Predvolené (Package-Private): Často sa používa v obslužných programoch alebo pomocných triedach s rozsahom balíkov.
- Chránené: Bežne sa používa v dizajnoch založených na dedičnosti, ako sú rozšírenia rámca.
- Verejné : Používa sa pre triedy služieb koncových bodov API alebo pomocné metódy zdieľané v rôznych častiach aplikácie.