Modifikátory přístupu v Javě jsou základními nástroji, které definují, jak lze k členům třídy, jako jsou metody proměnných, a dokonce i ke třídě samotné přistupovat z jiných částí našeho programu.
V Javě jsou k dispozici 4 typy modifikátorů přístupu:
Modifikátory přístupu v JavěModifikátor soukromého přístupu
Modifikátor soukromého přístupu je určen pomocí klíčového slova private. Metody nebo datové členy deklarované jako soukromé jsou přístupné pouze v rámci třídy, ve které jsou deklarovány.
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
Vysvětlení: Přímý přístup ke jménu není povolen mimo Osoba prosazující zapouzdření.
Výchozí modifikátor přístupu
Není-li pro metodu třídy nebo datový člen zadán žádný modifikátor přístupu, říká se, že má ve výchozím nastavení výchozí modifikátor přístupu. To znamená, že k němu mají přístup pouze třídy v rámci stejného balíčku.
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
Vysvětlení: Ke členům s výchozím přístupem nelze přistupovat z tříd v jiném balíčku.
Geeks.java: Výchozí třída ve stejném balíčku
Java// default access modifier package p1; // Class Geek is having // Default access modifier class Geek { void display() { System.out.println('Hello World!'); } }
GeeksNew.java: Výchozí třída z jiného balíčku (pro 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(); } }
Vysvětlení: V tomto příkladu program zobrazí chybu při kompilaci, když se pokusíme získat přístup k výchozí třídě modifikátoru z jiného balíčku.
Modifikátor chráněného přístupu
Modifikátor chráněného přístupu se zadává pomocí klíčového slova protected. Metody nebo datové členy deklarované jako chráněné jsou přístupné v rámci stejného balíčku nebo podtříd v různých balíčcích.
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
Vysvětlení: rychlost je přístupná prostřednictvím metod podtřídy a dalších tříd ve stejném balíčku, ale přímý přístup z jiného balíčku (nepodtřídy) by selhal.
Modifikátor veřejného přístupu
Modifikátor veřejného přístupu je specifikován pomocí klíčového slova public. Veřejní členové jsou přístupní odkudkoli v programu. Neexistuje žádné omezení rozsahu členů veřejných údajů.
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
Vysvětlení: add() je globálně přístupné díky modifikátoru public.
Třídy nebo rozhraní nejvyšší úrovně nelze deklarovat jako soukromé, protože soukromé znamená „viditelné pouze v rámci ohraničující třídy“.
Srovnávací tabulka přístupových modifikátorů v Javě
Access-ModifierKdy použít každý modifikátor přístupu v projektech reálného světa
- soukromé: Myšlenkou by mělo být použití co nejomezujícího přístupu, takže soukromý by měl být používán co nejvíce.
- Výchozí (Package-Private): Často se používá v obslužných programech s rozsahem balíčků nebo pomocných třídách.
- Chráněný: Běžně se používá v návrzích založených na dědičnosti, jako jsou rozšíření rámců.
- Veřejnost : Používá se pro třídy služeb koncových bodů API nebo obslužné metody sdílené v různých částech aplikace.