22. 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:

  1. private
  2. default
  3. protected
  4. public

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