I Java er tilgangsmodifikatorer essensielle verktøy som definerer hvordan medlemmene av en klasse liker variabelmetoder og til og med selve klassen kan nås fra andre deler av programmet vårt.
Det er 4 typer tilgangsmodifikatorer tilgjengelig i Java:
Tilgang Modifikatorer i JavaModifikator for privat tilgang
Modifikatoren for privat tilgang er spesifisert med nøkkelordet privat. Metodene eller datamedlemmene som er erklært som private er bare tilgjengelige innenfor klassen de er deklarert i.
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()); } }
Produksjon
Alice
Forklaring: Direkte tilgang til navn er ikke tillatt utenfor Person som håndhever innkapsling.
Standard tilgangsmodifikator
Når ingen tilgangsmodifikator er spesifisert for en klassemetode eller datamedlem, sies det å ha standard tilgangsmodifikator som standard. Dette betyr at bare klasser innenfor samme pakke har tilgang 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); } }
Produksjon
Tesla
Forklaring: Medlemmer med standardtilgang kan ikke nås fra klasser i en annen pakke.
Geeks.java: Standardklasse innenfor 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 annen pakke (for 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 eksemplet vil programmet vise kompileringstidsfeilen når vi prøver å få tilgang til en standard modifikatorklasse fra en annen pakke.
Protected Access Modifier
Modifikatoren for beskyttet tilgang er spesifisert ved å bruke nøkkelordet beskyttet. Metodene eller datamedlemmene som er erklært som beskyttede er tilgjengelige innenfor samme pakke eller underklasser i forskjellige 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); } }
Produksjon
Access via subclass method: 100 0
Forklaring: hastighet er tilgjengelig via underklassemetoder og andre klasser i samme pakke, men direkte tilgang fra en annen pakke (ikke-underklasse) ville mislykkes.
Modifikator for offentlig tilgang
Modifikatoren for offentlig tilgang spesifiseres ved å bruke nøkkelordet offentlig. Offentlige medlemmer er tilgjengelige fra overalt i programmet. Det er ingen begrensning på omfanget av 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 } }
Produksjon
15
Forklaring: add() er globalt tilgjengelig på grunn av den offentlige modifikatoren.
Toppnivåklasser eller grensesnitt kan ikke erklæres som private fordi private betyr "bare synlig innenfor den omsluttende klassen".
Sammenligningstabell over tilgangsmodifikatorer i Java
TilgangsmodifikatorNår skal du bruke hver tilgangsmodifikator i virkelige prosjekter
- Privat: Ideen bør være bruk så restriktiv tilgang som mulig, så privat bør brukes så mye som mulig.
- Misligholde (Package-Privat): Brukes ofte i pakkebaserte verktøy eller hjelpeklasser.
- Beskyttet: Vanligvis brukt i arvebaserte design som rammeutvidelser.
- Offentlig : Dette brukes for API-endepunkter-tjenesteklasser eller verktøymetoder som deles på tvers av forskjellige deler av en applikasjon.