„Java“ prieigos modifikatoriai yra esminiai įrankiai, apibrėžiantys, kaip klasės nariai, pavyzdžiui, kintamųjų metodai, ir net pati klasė gali būti pasiekiami iš kitų mūsų programos dalių.
„Java“ yra 4 prieigos modifikatorių tipai:
Pasiekite modifikatorius JavaPrivačios prieigos modifikatorius
Privačios prieigos modifikatorius nurodomas naudojant raktinį žodį privatus. Metodai arba duomenų nariai, paskelbti privačiais, yra prieinami tik toje klasėje, kurioje jie deklaruoti.
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()); } }
Išvestis
Alice
Paaiškinimas: Tiesioginė prieiga prie vardo neleidžiama išoriniam asmeniui, vykdančiam inkapsuliavimą.
Numatytasis prieigos modifikatorius
Kai klasės metodui arba duomenų nariui nenurodytas prieigos modifikatorius, pagal numatytuosius nustatymus jis turi numatytąjį prieigos modifikatorių. Tai reiškia, kad jį gali pasiekti tik to paties paketo klasės.
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); } }
Išvestis
Tesla
Paaiškinimas: Nariai, turintys numatytąją prieigą, negali būti pasiekti iš klasių kitame pakete.
Geeks.java: Numatytoji klasė tame pačiame pakete
Java// default access modifier package p1; // Class Geek is having // Default access modifier class Geek { void display() { System.out.println('Hello World!'); } }
GeeksNew.java: Numatytoji klasė iš kito paketo (dėl kontrasto)
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(); } }
Paaiškinimas: Šiame pavyzdyje programa parodys kompiliavimo laiko klaidą, kai bandysime pasiekti numatytąją modifikatoriaus klasę iš kito paketo.
Apsaugotos prieigos modifikatorius
Apsaugotas prieigos modifikatorius nurodomas naudojant raktinį žodį protected. Metodai arba duomenų nariai, paskelbti apsaugotais, yra prieinami tame pačiame pakete arba poklasiuose skirtinguose paketuose.
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); } }
Išvestis
Access via subclass method: 100 0
Paaiškinimas: greitis pasiekiamas naudojant poklasio metodus ir kitas tame pačiame pakete esančias klases, tačiau tiesioginė prieiga iš kito paketo (ne poklasio) nepavyks.
Viešosios prieigos modifikatorius
Viešosios prieigos modifikatorius nurodomas naudojant raktinį žodį public. Viešieji nariai pasiekiami iš bet kurios programos vietos. Viešųjų duomenų narių apimtis nėra ribojama.
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 } }
Išvestis
15
Paaiškinimas: add() yra visuotinai prieinamas dėl viešojo modifikatoriaus.
Aukščiausio lygio klasės arba sąsajos negali būti paskelbtos privačiomis, nes privatus reiškia „matomas tik įtraukiančioje klasėje“.
„Java“ prieigos modifikatorių palyginimo lentelė
Prieigos modifikatoriusKada naudoti kiekvieną prieigos modifikatorių realaus pasaulio projektuose
- Privatus: Idėja turėtų būti kuo labiau apribota prieiga, taigi privatus turėtų būti naudojamas kuo daugiau.
- Numatytoji (Privatus paketas): dažnai naudojamas paketų apimties komunalinėse paslaugose arba pagalbinėse klasėse.
- Apsaugota: Dažniausiai naudojamas paveldėjimu pagrįstuose projektuose, pvz., sistemos plėtiniuose.
- Viešas : naudojama API galinių taškų paslaugų klasėms arba naudingumo metodams, bendrinamiems skirtingose programos dalyse.