I Java er adgangsmodifikatorer essentielle værktøjer, der definerer, hvordan medlemmer af en klasse kan lide variable metoder og endda selve klassen kan tilgås fra andre dele af vores program.
Der er 4 typer adgangsmodifikatorer tilgængelige i Java:
Adgang modifikatorer i JavaModifikator for privat adgang
Den private adgangsmodifikator er angivet ved hjælp af nøgleordet privat. De metoder eller datamedlemmer, der er erklæret som private, er kun tilgængelige inden for den klasse, hvori de er erklæret.
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()); } }
Produktion
Alice
Forklaring: Direkte adgang til navn er ikke tilladt uden for Person, der håndhæver indkapsling.
Standardadgangsmodifikator
Når der ikke er angivet nogen adgangsmodifikator for en klassemetode eller et datamedlem, siges det at have standardadgangsmodifikatoren som standard. Det betyder, at kun klasser inden for den samme pakke kan få adgang til den.
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); } }
Produktion
Tesla
Forklaring: Medlemmer med standardadgang kan ikke tilgås fra klasser i en anden pakke.
Geeks.java: Standardklasse inden for samme pakke
Java// default access modifier package p1; // Class Geek is having // Default access modifier class Geek { void display() { System.out.println('Hello World!'); } }
GeeksNew.java: Standardklasse fra en anden pakke (til 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(); } }
Forklaring: I dette eksempel vil programmet vise kompileringstidsfejlen, når vi forsøger at få adgang til en standardmodifikatorklasse fra en anden pakke.
Beskyttet adgangsmodifikator
Modifikatoren for beskyttet adgang er angivet ved hjælp af nøgleordet beskyttet. De metoder eller datamedlemmer, der er erklæret som beskyttede, er tilgængelige inden for den samme pakke eller underklasser i forskellige pakker.
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); } }
Produktion
Access via subclass method: 100 0
Forklaring: hastighed er tilgængelig via underklassemetoder og andre klasser i den samme pakke, men direkte adgang fra en anden pakke (ikke-underklasse) ville mislykkes.
Offentlig adgangsmodifikator
Offentlig adgangsmodifikator er angivet ved hjælp af nøgleordet offentlig. Offentlige medlemmer er tilgængelige fra alle steder i programmet. Der er ingen begrænsning på omfanget af offentlige datamedlemmer.
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 } }
Produktion
15
Forklaring: add() er globalt tilgængelig på grund af den offentlige modifikator.
Klasser eller grænseflader på øverste niveau kan ikke erklæres som private, fordi private betyder 'kun synlige inden for den omsluttende klasse'.
Sammenligningstabel over adgangsmodifikatorer i Java
AdgangsmodifikatorHvornår skal du bruge hver adgangsmodifikator i real-World-projekter
- Privat: Idéen bør være at bruge så restriktiv adgang som muligt, så privat bør bruges så meget som muligt.
- Misligholdelse (Package-Privat): Bruges ofte i pakkeomfattede hjælpeprogrammer eller hjælperklasser.
- Beskyttet: Almindeligvis brugt i arv-baserede designs som rammeudvidelser.
- Offentlig : Dette bruges til API-endepunkters serviceklasser eller hjælpemetoder, der deles på tværs af forskellige dele af en applikation.