logo

Adgang modifikatorer i Java

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: 

Adgangsmodifikatorer-i-Java-1' title=Adgang modifikatorer i Java

Modifikator 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.

Java
class 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.

Java
class 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.

Java
class 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

samme_klasse' loading='lazy' title=Adgangsmodifikator

Hvornå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.


Opret quiz