В языке программирования Java мы можем видеть два основных типа модификаторов, которые являются модификаторами доступа и модификаторами отсутствия доступа.
Модификаторы доступа
- общественный
- защищенный
- по умолчанию
- частный
Модификаторы, запрещающие доступ
- статический
- окончательный
- абстрактный
- синхронизированный
- летучий
- преходящий
- родной
- строгий режим
В этой статье я расскажу о модификаторах доступа.
Модификаторы доступа отвечают за определение области видимости, в которой видны такие элементы, как методы, переменные кода.
частный
- Модификатор частного доступа доступен только из класса.
- Модификатор частного доступа неприменим для классов и интерфейсов
- Применимо к методам, свойствам и конструкторам
package temp; class A{ private int x; } class B{ A a = new A(); System.out.println(a.x); }
Приведенный выше код содержит синтаксическую ошибку. Поскольку невозможно получить доступ к x
из класса B, поскольку он изменен как private
в классе A. Так x
доступен только из класса A.
по умолчанию
- Если разработчик явно не определил модификаторы доступа, этот участник имеет модификатор доступа по умолчанию.
- модификатор доступа по умолчанию виден всем классам в одном пакете. Так называемый пакет-частный
package temp; class A{ int x; } class B{ A a = new A(); System.out.println(a.x); }
Теперь в приведенном выше примере можно получить доступ к x
из класса B. Поскольку x
изменен по умолчанию и A
и B
оба класса находятся в одном пакете.
package temp; class A{ int x; } package temp2; class C extends B{ void m(){ System.out.println(x); } }
В приведенном выше коде даже класс C
имеет расширенный класс B
, внутри класса C
не может получить доступ к x
. Потому что x
изменен по умолчанию, и класс пытается получить доступ к x
из другого пакета.
Защищенный
- модификатор защищенного доступа виден для того же пакета
- модификатор защищенного доступа также виден другим пакетам, но только через подкласс
- применимо для конструктора, метода и свойства
package temp; class A{ protected int x; } package temp2; class C extends B{ void m(){ System.out.println(x); } }
В приведенном выше примере из C
класса пакета temp2
можно получить доступ к x
, который определен в A
класс в упаковке температура
потому что x имеет модификатор защищенного доступа. Кроме того, x
будет доступен для дочерних классов C.
общественный
- доступный везде
- применимо к классам, интерфейсам, свойствам, методам, конструкторам
package temp; class A{ public int x; } package temp; class D{ void method(){ A a = new A(); System.out.println(a.x); } }
В приведенном выше коде x
переменная класса A
доступен для всех частей кода. Таким образом, можно получить доступ к x
из класса D в пакете temp2
.
Сравнение
общественный
- внутри класса: да
- внутри упаковки: да
- внешний пакет путем наследования: да
- вне упаковки: да
защищенный
- внутри класса: да
- внутри упаковки: да
- внешний пакет путем наследования: да
- вне упаковки: нет
по умолчанию
- внутри класса: да
- внутри упаковки: да
- внешний пакет путем наследования: нет
- вне упаковки: нет
частный
- внутри класса: да
- внутри упаковки: нет
- внешний пакет путем наследования: нет
- вне упаковки: нет
Оригинал: “https://dev.to/buddhikac96/access-modifiers-3647”