I Java är åtkomstmodifierare viktiga verktyg som definierar hur medlemmarna i en klass gillar variabler metoder och till och med själva klassen kan nås från andra delar av vårt program.
Det finns fyra typer av åtkomstmodifierare tillgängliga i Java:
Åtkomstmodifierare i JavaModifierare för privat åtkomst
Modifieraren för privat åtkomst anges med nyckelordet privat. De metoder eller datamedlemmar som deklarerats som privata är endast tillgängliga inom den klass där de deklareras.
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
Förklaring: Direktåtkomst till namn är inte tillåten utanför Person som upprätthåller inkapsling.
Standardåtkomstmodifierare
När ingen åtkomstmodifierare är specificerad för en klassmetod eller datamedlem sägs den ha standardåtkomstmodifieraren som standard. Detta innebär att endast klasser inom samma paket kan komma åt det.
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
Förklaring: Medlemmar med standardåtkomst kan inte nås från klasser i ett annat paket.
Geeks.java: Standardklass inom samma paket
Java// default access modifier package p1; // Class Geek is having // Default access modifier class Geek { void display() { System.out.println('Hello World!'); } }
GeeksNew.java: Standardklass från ett annat paket (för 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(); } }
Förklaring: I det här exemplet kommer programmet att visa kompileringstidsfelet när vi försöker komma åt en standardmodifieringsklass från ett annat paket.
Protected Access Modifier
Modifieraren för skyddad åtkomst anges med nyckelordet protected. Metoderna eller datamedlemmarna som deklarerats som skyddade är tillgängliga inom samma paket eller underklasser i olika paket.
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
Förklaring: hastighet är tillgänglig via underklassmetoder och andra klasser i samma paket men direkt åtkomst från ett annat paket (icke-underklass) skulle misslyckas.
Public Access Modifier
Modifieraren för offentlig åtkomst anges med nyckelordet public. Offentliga medlemmar är tillgängliga från alla håll i programmet. Det finns ingen begränsning av omfattningen av medlemmar av offentliga uppgifter.
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
Förklaring: add() är globalt tillgänglig på grund av den offentliga modifieraren.
Klasser eller gränssnitt på toppnivå kan inte deklareras som privata eftersom privat betyder "endast synlig inom den omslutande klassen".
Jämförelsetabell för åtkomstmodifierare i Java
Access-modifierareNär ska man använda varje åtkomstmodifierare i verkliga projekt
- Privat: Tanken ska vara att använda så restriktiv tillgång som möjligt så privat ska användas så mycket som möjligt.
- Standard (Package-Private): Används ofta i paketomfattade verktyg eller hjälpklasser.
- Skyddad: Används vanligen i arvsbaserade konstruktioner som ramförlängningar.
- Offentlig : Detta används för API-ändpunkters tjänsteklasser eller verktygsmetoder som delas mellan olika delar av en applikation.