Postoje dva tipa modifikatora u javi: pristupni modifikatori i ne-pristupni modifikatori.
Pristupni modifikatori u javi specificiraju dostupnost (scope) podataka-članova, metoda, konstruktora ili klase.
Postoje 4 tipa java modifikatora pristupa:
Postoji mnogo ne-pristupnih modifikatora kao što su static, abstract, synchronized, native, volatile, transient itd. Ovdje ćemo razmotriti modifikatore pristupa.
1) private modifikator pristupa
Modifikator pristupa private je dostupan samo unutar klase.
Jednostavan primjer private modifikatora pristupa
U ovom primjeru, kreiraćemo dve klase A i Simple. A klasa sadrži private podatak-član i private metod. Pristupićemo ovim private članovima izvan klase, tako da će se javiti compile time error.
class A{ private int data=40; private void msg(){System.out.println("Hello java");} } public class Simple{ public static void main(String args[]){ A obj=new A(); System.out.println(obj.data); //Compile Time Error obj.msg(); //Compile Time Error } }
Uloga private konstruktora
Ako učinimo bilo koji konstruktor u klasi private, nećemo moći kreirati instancu te klase izvan te klase.
Na primjer:
class A{ private A(){} //private konstruktor void msg(){System.out.println("Hello java");} } public class Simple{ public static void main(String args[]){ A obj=new A(); //Compile Time Error } }
Napomena 1: Klasa ne može biti private ili protected osim ugniježdene klase.
2) default modifikator pristupa
Ako ne koristimo nikakav modifikator, to se tretira kao default modifikator. Default modifikator je dostupan samo unutar paketa.
Primjer default modifikatora pristupa
U ovom primjeru, kreiraćemo dva paketa pack i mypack. Pristupamo A klasi izvan njenog paketa, pošto A klasa nije public, njoj se ne može pristupiti izvan paketa.
//sačuvano od A.java package pack; class A{ void msg(){System.out.println("Hello");} } //sačuvano od B.java package mypack; import pack.*; class B{ public static void main(String args[]){ A obj = new A(); //Compile Time Error obj.msg(); //Compile Time Error } }
3) protected modifikator pristupa
Protected modifikator pristupa je dostupan unutar paketa i izvan paketa ali samo preko nasljeđivanja.
Protected modifikator pristupa može se primijeniti na podatak-član, metod i konstruktor. Ne može se primijeniti na klasu.
Primjer protected modifikatora pristupa
U ovom primjeru, kreiraćemo dva paketa pack i mypack. A klasa paketa pack je public, tako da joj se može pristupiti izvan paketa. Ali msg metod ovog paketa je deklarisan kao protected, tako da mu se može pristupiti izvan klase samo preko nasljeđivanja.
//sačuvano od A.java package pack; public class A{ protected void msg(){System.out.println("Hello");} } //sačuvano od B.java package mypack; import pack.*; class B extends A{ public static void main(String args[]){ B obj = new B(); obj.msg(); } } Ispis na ekranu: Hello
4) public modifikator pristupa
Public modifikator pristupa je dostupan svuda. On ima najširi domet među svim modifikatorima.
Primjer public modifikatora pristupa
//sačuvano od A.java package pack; public class A{ public void msg(){System.out.println("Hello");} } //sačuvano od B.java package mypack; import pack.*; class B{ public static void main(String args[]){ A obj = new A(); obj.msg(); } } Ispis na ekranu: Hello
Razumijevanje svih java modifikatora pristupa
Prikažimo modifikatore pristupa jednostavnom tabelom.
Modifikator pristupa |
unutar klase |
unutar paketa |
izvan paketa samo preko podklase |
izvan paketa |
Private |
DA |
NE |
NE |
NE |
Default |
DA |
DA |
NE |
NE |
Protected |
DA |
DA |
DA |
NE |
Public |
DA |
DA |
DA |
DA |
Java modifikatori pristupa sa preklapanjem metoda
Ako preklapamo neki metod, preklopljeni metod (tj. deklarisan u podklasi) ne smije biti restriktivniji.
class A{ protected void msg(){System.out.println("Hello java");} } public class Simple extends A{ void msg(){System.out.println("Hello java");} //Compile Time Error public static void main(String args[]){ Simple obj=new Simple(); obj.msg(); } }
Default modifikator je restriktivniji nego protected. Zato se javio compile time error.
Akcesori i mutatori
Poznato je da su instansni podaci uglavnom deklarisani sa vidljivošću (pristupom) private. Zbog toga, klasa obično obezbjeđuje servise za pristup i modifikovanje vrijednosti podataka. Akcesor metod obezbjeđuje pristup samo za čitanje (read-only) određenoj vrijednosti. Isto tako, mutator metod, ponekad nazvan i modifikator metod, mijenja određenu vrijednost.
Generalno, ime akcesor metoda ima formu getX, gdje je X vrijednost kojoj on obezbjeđuje pristup. Isto tako, ime mutator metoda ima formu setX, gdje je X vrijednost koja se podešava. Zbog toga se ovi tipovi metoda ponekad nazivaju “geteri“ i “seteri“.
Objektno orijentisano programiranje u Javi Index