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 вказується за допомогою ключового слова 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() доступний глобально завдяки модифікатору public.

Класи або інтерфейси верхнього рівня не можуть бути оголошені як приватні, оскільки приватні означає «видимі лише в класі, що входить».

Порівняльна таблиця модифікаторів доступу в Java

той самий_клас' loading='lazy' title=Модифікатор доступу

Коли використовувати кожен модифікатор доступу в реальних проектах

  • Приватний: Ідея повинна полягати в тому, щоб використовувати максимально обмежений доступ, тому приватний слід використовувати якомога більше.
  • За замовчуванням (Package-Private): часто використовується в пакетних утилітах або допоміжних класах.
  • Захищено: Зазвичай використовується в дизайнах на основі успадкування, таких як розширення фреймворку.
  • Громадський : це використовується для класів обслуговування кінцевих точок API або службових методів, які спільно використовуються в різних частинах програми.


Створіть вікторину