Pristupiti modifikatorima na Javi

1. Pregled

U ovom uputstvu pregledat ćemo modifikatore pristupa na Javi koji se koriste za postavljanje razine pristupa razredima, varijablama, metodama i konstruktorima.

Jednostavno rečeno, postoje četiri modifikatora pristupa:javnost, privatni, zaštićen i zadano (bez ključne riječi).

Prije nego što započnemo, imajmo na umu da klasa najviše razine može koristiti javnost ili zadano samo modifikatori pristupa. Na razini članova možemo koristiti sve četiri.

2. Zadano

Kada eksplicitno ne koristimo nijednu ključnu riječ, Java će postaviti a zadano pristup zadanoj klasi, metodi ili svojstvu. Zove se i zadani modifikator pristupa paket-privatni, što znači da svi članovi su vidljivi u istom paketu ali nisu dostupni iz drugih paketa:

paket com.baeldung.accessmodifiers; javna klasa SuperPublic {static void defaultMethod () {...}}

zadana metoda () je dostupan u drugoj klasi istog paketa:

paket com.baeldung.accessmodifiers; javna klasa Public {public Public () {SuperPublic.defaultMethod (); // Dostupno u istom paketu. }}

Međutim, nije dostupan u drugim paketima.

3. Javno

Ako tome dodamo javnost ključna riječ za klasu, metodu ili svojstvo stavljamo ga na raspolaganje cijelom svijetu, tj. moći će ga koristiti sve ostale klase u svim paketima. Ovo je najmanje restriktivni modifikator pristupa:

paket com.baeldung.accessmodifiers; javna klasa SuperPublic {public static void publicMethod () {...}}

publicMethod () dostupan je u drugom paketu:

paket com.baeldung.accessmodifiers.another; uvoz com.baeldung.accessmodifiers.SuperPublic; javna klasa AnotherPublic {public AnotherPublic () {SuperPublic.publicMethod (); // Dostupno svugdje. Napomenimo drugačiji paket. }}

Za više detalja o tome kako javnost Ključna riječ ponaša se kada se primjenjuje na klasu, sučelje, ugniježđenu javnu klasu ili sučelje i metodu, pogledajte namjenski članak.

4. Privatno

Bilo koja metoda, svojstvo ili konstruktor s privatni ključna riječ je dostupan samo iz iste klase. Ovo je najo restriktivniji modifikator pristupa i srž je koncepta enkapsulacije. Svi će podaci biti skriveni od vanjskog svijeta:

paket com.baeldung.accessmodifiers; javna klasa SuperPublic {static private void privateMethod () {...} private void anotherPrivateMethod () {privateMethod (); // dostupan samo u istoj klasi. }}

Ovaj detaljniji članak pokazat će kako privatni ključna riječ ponaša se kada se primjenjuje na polje, konstruktor, metodu i na unutarnju klasu.

5. Zaštićeno

Između javnost i privatni razine pristupa, postoji zaštićen modifikator pristupa.

Ako deklariramo metodu, svojstvo ili konstruktor s zaštićen ključnu riječ, članu možemo pristupiti s isti paket (kao kod paket-privatni nivo pristupa) i pored toga iz svih podrazreda svoje klase, čak i ako leže u drugim paketima:

paket com.baeldung.accessmodifiers; javna klasa SuperPublic {static protected void protectedMethod () {...}}

protectedMethod () dostupan je u podrazredima (bez obzira na paket):

paket com.baeldung.accessmodifiers.another; import com.baeldung.accessmodifiers.SuperPublic; javna klasa AnotherSubClass proširuje SuperPublic {public AnotherSubClass () {SuperPublic.protectedMethod (); // Dostupno u podrazredu. Napomenimo drugačiji paket. }}

Namjenski članak opisuje više o ključnoj riječi kada se koristi u polju, metodi, konstruktoru, unutarnjoj klasi i dostupnosti u istom paketu ili drugom paketu.

6. Usporedba

Tablica u nastavku sažima dostupne modifikatore pristupa. Vidimo da klasa, bez obzira na korištene modifikatore pristupa, uvijek ima pristup svojim članovima:

ModifikatorRazredPaketPodrazredSvijet
javnost
YYYY
zaštićen
YYYN
zadano
YYNN
privatni
YNNN

7. Zaključak

U ovom smo kratkom članku pregledali modifikatore pristupa na Javi.

Dobra je praksa koristiti što restriktivniju razinu pristupa za bilo kojeg člana kako bi se spriječile zlouporabe. Uvijek bismo trebali koristiti privatni modifikator pristupa, osim ako postoji dobar razlog da to ne učinite.

Javnost razina pristupa treba se koristiti samo ako je član dio API-ja.

Kao i uvijek, primjeri koda dostupni su na Githubu.