logo

Modyfikatory dostępu w Javie

W Javie modyfikatory dostępu są niezbędnymi narzędziami, które definiują sposób, w jaki członkowie klasy, np. metody zmiennych, a nawet sama klasa, będą dostępne z innych części naszego programu.

W Javie dostępne są 4 typy modyfikatorów dostępu: 

Modyfikatory dostępu w Javie-1' title=Modyfikatory dostępu w Javie

Modyfikator dostępu prywatnego

Modyfikator dostępu prywatnego jest określany za pomocą słowa kluczowego private. Metody lub elementy danych zadeklarowane jako prywatne są dostępne tylko w klasie, w której zostały zadeklarowane.



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());  } } 

Wyjście
Alice 

Wyjaśnienie: Bezpośredni dostęp do nazwy nie jest dozwolony poza osobą wymuszającą enkapsulację.

Domyślny modyfikator dostępu

Jeśli dla metody klasy lub elementu danych nie określono żadnego modyfikatora dostępu, mówi się, że domyślnie ma on domyślny modyfikator dostępu. Oznacza to, że dostęp do niego mają tylko klasy w tym samym pakiecie.

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);  } } 

Wyjście
Tesla 

Wyjaśnienie: Nie można uzyskać dostępu do członków z dostępem domyślnym z klas w innym pakiecie.

Geeks.java: Domyślna klasa w tym samym pakiecie

Java
// default access modifier  package p1;  // Class Geek is having  // Default access modifier  class Geek  {   void display()   {   System.out.println('Hello World!');   }  } 

GeeksNew.java: Domyślna klasa z innego pakietu (dla kontrastu)

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();   }  } 

Wyjaśnienie:  W tym przykładzie program wyświetli błąd kompilacji, gdy spróbujemy uzyskać dostęp do domyślnej klasy modyfikatora z innego pakietu.

Chroniony modyfikator dostępu

Modyfikator dostępu chronionego jest określany przy użyciu słowa kluczowego chronione. Metody lub elementy danych zadeklarowane jako chronione są dostępne w ramach tego samego pakietu lub podklas w różnych pakietach.

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);  } } 

Wyjście
Access via subclass method: 100 0 

Wyjaśnienie: speed jest dostępny poprzez metody podklas i inne klasy w tym samym pakiecie, ale bezpośredni dostęp z innego pakietu (niebędącego podklasą) zakończyłby się niepowodzeniem.

Modyfikator dostępu publicznego

Modyfikator dostępu publicznego jest określany za pomocą słowa kluczowego public. Członkowie publiczni są dostępni z każdego miejsca w programie. Nie ma ograniczeń co do zakresu członków danych publicznych.

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  } } 

Wyjście
15 

Wyjaśnienie: add() jest dostępna globalnie dzięki modyfikatorowi public.

Klasy lub interfejsy najwyższego poziomu nie mogą być zadeklarowane jako prywatne, ponieważ prywatne oznaczają „widoczne tylko w otaczającej je klasie”.

Tabela porównawcza modyfikatorów dostępu w Javie

ta sama_klasa' loading='lazy' title=Modyfikator dostępu

Kiedy używać każdego modyfikatora dostępu w projektach w świecie rzeczywistym

  • Prywatny: Pomysł powinien polegać na możliwie jak najbardziej restrykcyjnym dostępie, dlatego prywatny powinien być używany w jak największym stopniu.
  • Domyślny (Pakiet prywatny): Często używany w narzędziach o zasięgu pakietu lub klasach pomocniczych.
  • Chroniony: Powszechnie stosowane w projektach opartych na dziedziczeniu, takich jak rozszerzenia frameworka.
  • Publiczny : Jest używany w przypadku klas usług punktów końcowych API lub metod narzędziowych współdzielonych w różnych częściach aplikacji.


Utwórz quiz