Модификатор доступа (Access modifiers) в Java

View more categories:

1- Modifier в Java

Существует два вида modifier в java: access modifiers и non-access modifiers.
Аccess modifiers в java определяют общедоступность (Рамки) в данные полей, методов, конструкторов или класса.
Есть 4 вида java access modifiers:
  1. private
  2. (По умолчанию)
  3. protected
  4. public
И есть некоторые  non-access modifiers например  static, abstract, synchronized, native, volatile, transient, и т.д.. В данной статье мы изучим про  access modifier.

2- Обзор access modifier

Таблица ниже иллюстрирует общее понятие про использование access modifier.
Access Modifier Доступ внутри класса? Доступ внутри пакета? Доступ снаружи пакета подклассом? Доступ снаружи пакета не в подклассе?
private Y      
по умолчанию Y Y    
protected Y Y Y  
public Y Y Y Y
Можете понять более детально по следующим примерам:

3- private access modifier

private access modifier только позволяет получить доступ внутри одного класса.
Вы не можете получить доступ к полю  private вне класса, который определяет его как private. Java оповестить об ошибке во время компиляции класса.

4- private constructor

Если вы создаете класс и имеете конструктор private, вы не можете создать объект этого класса из того конструктора private, вне этого класса. Посмотрим изображенный пример:

5- Access modifier по умолчанию

В случае, если вы объявляете поле, метод, или конструктор (constructor), class, .. но не пишете точно  access modifier, это означает что он является access modifier по умолчанию.

Рамки доступа access modifier по умолчанию это внутри package.
// A class with default access modifier
// (Not public).
class MyClass   {

 // A field with private access modifier.
 private int myField;

 // A field with default access modifier.
 // (not specified public, protected, private).
 String myField2;

 // A method with default access modifier.
 // (not specified public, protected, private).
 void showMe()  {

 }
}
В том же package вы можете получить доступ к членам имеющим access modifier по умолчанию.
И вы не можете получить доступ снаружи package, даже в подклассе.

Примечание:

С интерфейсом, когда вы объявляете поле (Field) или метод (Method) вам всегда нужно объявлять  public или ставить по умолчанию, но Java всегда будет понимать это как  public.
public interface MyInterface  {

   // This is a field, you can not declare private or protected.
  public static int MY_FIELD1 = 100;

  // This is a field with default access modifier
  // But Java considering this is a public.
  static int MY_FIELD2 = 200;

  // This is a method, with default access modifier
  // But Java considering this is a public.
  void showInfo();
}

6- protected access modifier

protected access modifier может получить доступ внутри package, или снаружи  package но только через наследственность.
 
protected access modifier применяется только для поля, метода и конструктора. Не может применяться для класса (class, interface, enum, annotation).

7- public access modifier

public access modifier это самы сильный и может получить доступ везде. Он имеет самый широкий диапазон доступа по сравнению с другими modifier.

8- Метод переопределения

Вы можете переопределить метод родительского класса, метод которого имеет одинаковое название и параметр в подклассе. Но вы не можете ограничить рамки доступа этого метода.
На изображении выше.
  1. Class Cat расширенный из class Animal и переопределить метод move(), переопределть рамки доступа из protected в public, это действительно.
  2. Class Mouse расширенный из class Animal и переопределить метод move(), ереопределть рамки доступа из protected в по умолчанию, уменьшает рамки доступа корневого метода, это неразрешено.

View more categories: