Modifikatori pristupa u Javi
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:
Uloga private konstruktora
Ako učinimo bilo koji konstruktor u klasi private, nećemo moći kreirati instancu te klase izvan te klase.
Na primer:
Napomena 1: Klasa ne može biti private ili protected osim ugnježđene klase.
2) default modifikator pristupa
Ako ne koristimo nikakav modifikator, to se tretira kao default modifikator. Default modifikator je dostupan samo unutar paketa.
Primer default modifikatora pristupa
U ovom primeru, 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.
3) protected modifikator pristupa
Protected modifikator pristupa je dostupan unutar paketa i izvan paketa ali samo preko nasleđivanja.
Protected modifikator pristupa može se primeniti na podatak-član, metod i konstruktor. Ne može se primeniti na klasu.
Primer protected modifikatora pristupa
U ovom primeru, 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 nasleđivanja.
4) public modifikator pristupa
Public modifikator pristupa je dostupan svuda. On ima najširi domet među svim modifikatorima.
Primer public modifikatora pristupa
Razumevanje svih Java modifikatora pristupa
Prikažimo modifikatore pristupa jednostavnom tabelom.
Java modifikatori pristupa sa preklapanjem metoda
Ako preklapamo neki metod, preklopljeni metod (tj. deklarisan u podklasi) ne sme biti restriktivniji.
Default modifikator je restriktivniji nego protected. Zato se javio compile time error.
Akcesori i mutatori
Poznato je da su instancni podaci uglavnom deklarisani sa vidljivošću (pristupom) private. Zbog toga, klasa obično obezbeđuje servise za pristup i modifikovanje vrednosti podataka. Akcesor metod obezbeđuje pristup samo za čitanje (read-only) određenoj vrednosti. Isto tako, mutator metod, ponekad nazvan i modifikator metod, menja određenu vrednost. 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“.
- private
- default
- protected
- public
1
2
3
4
5
6
7
8
9
10
11
12 |
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 } } |
1
2
3
4
5
6
7
8
9 |
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 } } |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 |
//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 } } |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 |
//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 |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 |
//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 |
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 |
1
2
3
4
5
6
7
8
9
10
11 |
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(); } } |