logo

Модификатори на достъп в Java

В Java модификаторите за достъп са основни инструменти, които определят как членовете на клас като методи на променливи и дори самият клас могат да бъдат достъпни от други части на нашата програма.

В Java има 4 типа модификатори за достъп: 

Access-Modifiers-in-Java-1' title=Модификатори на достъп в Java

Модификатор за частен достъп

Модификаторът за частен достъп се определя с помощта на ключовата дума private. Методите или членовете на данните, декларирани като частни, са достъпни само в рамките на класа, в който са декларирани.



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

Изход
Alice 

Обяснение: Директният достъп до името не е разрешен извън Лице, налагащо капсулиране.

Модификатор за достъп по подразбиране

Когато не е посочен модификатор за достъп за метод на клас или член на данни, се казва, че има модификатора за достъп по подразбиране по подразбиране. Това означава, че само класове в рамките на същия пакет имат достъп до него.

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

Изход
Tesla 

Обяснение: Членовете с достъп по подразбиране не могат да бъдат достъпни от класове в различен пакет.

Geeks.java: Клас по подразбиране в рамките на същия пакет

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

GeeksNew.java: Клас по подразбиране от различен пакет (за контраст)

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

Обяснение:  В този пример програмата ще покаже грешката по време на компилиране, когато се опитаме да получим достъп до клас модификатор по подразбиране от различен пакет.

Модификатор на защитен достъп

Модификаторът за защитен достъп се указва с помощта на ключовата дума protected. Методите или членовете на данните, декларирани като защитени, са достъпни в рамките на един и същи пакет или подкласове в различни пакети.

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

Изход
Access via subclass method: 100 0 

Обяснение: скоростта е достъпна чрез методи на подклас и други класове в същия пакет, но директният достъп от различен пакет (не-подклас) би се провалил.

Модификатор на публичен достъп

Модификаторът за публичен достъп се посочва с помощта на ключовата дума public. Публичните членове са достъпни от всяка точка на програмата. Няма ограничение за обхвата на членовете с публични данни.

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

Изход
15 

Обяснение: add() е глобално достъпен благодарение на публичния модификатор.

Класовете или интерфейсите от най-високо ниво не могат да бъдат декларирани като частни, защото частни означава „видими само в рамките на обграждащия клас“.

Сравнителна таблица на модификаторите за достъп в Java

същия_клас' loading='lazy' title=Access-Modifier

Кога да използвате всеки модификатор на достъп в проекти от реалния свят

  • Частно: Идеята трябва да се използва възможно най-рестриктивен достъп, така че частният трябва да се използва колкото е възможно повече.
  • По подразбиране (Package-Private): Често се използва в помощни програми с обхват на пакет или помощни класове.
  • Защитено: Често се използва в дизайни, базирани на наследяване, като разширения на рамка.
  • Обществен : Това се използва за класове на обслужване на крайни точки на API или помощни методи, споделени между различни части на приложение.


Създаване на тест