четверг, 24 сентября 2020 г.

Видимость переменных. Служебные слова-модификаторы доступа public, private, protected (Access modifiers)

Видимость переменных

Правила видимости переменных:

1 Переменная, объявленная в методе, существует(видна) с начала объявления метода до конца метода.

2 Переменная, объявленная в блоке кода (например if { }), существует до конца этого блока кода.

3 Переменные-аргументы метода существуют везде внутри метода.

4 Переменные класса или объекта существуют все время жизни содержащего их объекта.

(Их видимость дополнительно регулируется специальными модификаторами доступа: public, private).

5 Статические переменные классов существуют все время работы программы.

(Их видимость также определяется модификаторами доступа).


Служебные слова-модификаторы доступа

 

    Перед именами классов, методов и переменных могут стоять служебное слова-модификаторы доступа public, private, protected, позволяющие управлять доступностью (видимостью и возможностью использования) методов и переменных (сообщать компилятору Java параметры их доступности).

   (Эти служебные слова определяют места в коде, где к этим данным можно обратиться)

   Каждому методу или переменной можно указывать только один модификатор доступа.

   Модификаторы private и protected нужны, чтобы защитить поля от нежелательного изменения или доступа из других программ, которые используют класс.

 

default (package-private) (без модификатора, модификатор по-умолчанию)

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

   Если переменная или метод не помечены никаким модификатором, то считается, что они помечены «модификатором по умолчанию». Переменные или методы с таким модификатором (т.е. вообще без какого-нибудь модификатора) видны всем классам пакета, в котором они объявлены и только им.

   Этот модификатор еще иногда называют «package», так как доступ к переменным и методам открыт для всего пакета, в котором находится их класс.
 

  public
 
   Public - модификатор доступа, делающий данный класс публичным, общедоступным/
   Область доступа - без ограничений: помеченные им члены класса (методы и поля) доступны без ограничений из любого места программы (видны без ограничений и могут быть использованы в других классах, в других программах).
   Это самая высокая степень открытости - никаких ограничений нет. 

  private 

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

   К переменной или методу, помеченному модификатором private, можно обращаться только из того же класса, где он объявлен. Для всех остальных классов помеченный метод или переменная  невидимы.

   Это самая высокая степень закрытости – только свой класс. 


  protected 

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


   Последовательность слов-модификаторов по убыванию уровня закрытости: private, default, protected, public.
   *Во время наследования возможно изменения модификаторов доступа в сторону большей видимости - это сделано для того, чтобы не нарушался принцип LSP (Liskov substitution principle) для наследуемого класса. 


МодификаторДоступ из своего класса (в котором объявлен)
Доступ для классов своего пакетаДоступ из любого класса
public+++
без модификатора (package)++-
private+--

Комментариев нет:

Отправить комментарий

Наследование в Java

   «родительское/дочернее»     Наследование (inheritance) - свойство системы, позволяющее описать (создать) новый класс на основе уже су...