U Javi su modifikatori pristupa osnovni alati koji definiraju kako se članovima klase poput metoda varijabli, pa čak i samoj klasi, može pristupiti iz drugih dijelova našeg programa.
U Javi su dostupne 4 vrste modifikatora pristupa:
Modifikatori pristupa u JaviModifikator privatnog pristupa
Modifikator privatnog pristupa naveden je pomoću ključne riječi private. Metode ili članovi podataka deklarirani kao privatni dostupni su samo unutar klase u kojoj su deklarirani.
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()); } }
Izlaz
Alice
Obrazloženje: Izravan pristup imenu nije dopušten izvan Osobe koja provodi enkapsulaciju.
Zadani modifikator pristupa
Kada za metodu klase ili podatkovni član nije naveden modifikator pristupa, kaže se da ima zadani modifikator pristupa prema zadanim postavkama. To znači da mu mogu pristupiti samo klase unutar istog paketa.
Javaclass 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); } }
Izlaz
Tesla
Obrazloženje: Članovima sa zadanim pristupom ne može se pristupiti iz razreda u drugom paketu.
Geeks.java: Zadana klasa unutar istog paketa
Java// default access modifier package p1; // Class Geek is having // Default access modifier class Geek { void display() { System.out.println('Hello World!'); } }
GeeksNew.java: Zadana klasa iz drugog paketa (za 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(); } }
Obrazloženje: U ovom primjeru program će prikazati pogrešku tijekom kompajliranja kada pokušamo pristupiti zadanoj klasi modifikatora iz drugog paketa.
Modifikator zaštićenog pristupa
Modifikator zaštićenog pristupa naveden je pomoću ključne riječi protected. Metode ili članovi podataka deklarirani kao zaštićeni dostupni su unutar istog paketa ili podklasa u različitim paketima.
Javaclass 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); } }
Izlaz
Access via subclass method: 100 0
Obrazloženje: brzina je dostupna putem metoda potklase i drugih klasa u istom paketu, ali izravni pristup iz drugog paketa (koji nije podklasa) ne bi uspio.
Modifikator javnog pristupa
Modifikator javnog pristupa naveden je pomoću ključne riječi public. Javnim članovima se može pristupiti s bilo kojeg mjesta u programu. Ne postoji ograničenje opsega javnih podataka članova.
Javaclass 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 } }
Izlaz
15
Obrazloženje: add() je globalno dostupan zahvaljujući javnom modifikatoru.
Klase ili sučelja najviše razine ne mogu se deklarirati kao privatni jer privatno znači 'vidljivo samo unutar klase koja ga okružuje'.
Tablica usporedbe modifikatora pristupa u Javi
Modifikator pristupaKada koristiti svaki modifikator pristupa u projektima iz stvarnog svijeta
- Privatno: Ideja bi trebala biti korištenje što restriktivnijeg pristupa, tako da se privatno treba koristiti što je više moguće.
- Zadano (Paket-Privatno): Često se koristi u pomoćnim programima ili pomoćnim klasama u opsegu paketa.
- Zaštićen: Obično se koristi u dizajnu temeljenom na nasljeđivanju kao što su proširenja okvira.
- Javnost : Ovo se koristi za klase usluga krajnjih točaka API-ja ili pomoćne metode koje se dijele u različitim dijelovima aplikacije.