Modifikátory přístupu v Javě
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.
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 ); } }
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.
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 ); } }
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ů.
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 } }
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-Modifier Kdy 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.