Видимость переменных
Правила видимости переменных:
1 Переменная, объявленная в методе, существует(видна) с начала объявления метода до конца метода.
2 Переменная, объявленная в блоке кода (например if { }), существует до конца этого блока кода.
3 Переменные-аргументы метода существуют везде внутри метода.
4 Переменные класса или объекта существуют все время жизни содержащего их объекта.
(Их видимость дополнительно регулируется специальными модификаторами доступа: public, private).
5 Статические переменные классов существуют все время работы программы.
(Их видимость также определяется модификаторами доступа).
Служебные слова-модификаторы доступа
Перед именами классов, методов и переменных могут стоять служебное слова-модификаторы доступа public, private, protected, позволяющие управлять доступностью (видимостью и возможностью использования) методов и переменных (сообщать компилятору Java параметры их доступности).
(Эти служебные слова определяют места в коде, где к этим данным можно обратиться)
Каждому методу или переменной можно указывать только один модификатор доступа.
default (package-private) (без модификатора, модификатор по-умолчанию)
Область доступа - для всех классов данного пакета: члены класса доступны (видны и могут быть использованы) только внутри пакета.
Если переменная или метод не помечены никаким модификатором, то считается, что они помечены «модификатором по умолчанию». Переменные или методы с таким модификатором (т.е. вообще без какого-нибудь модификатора) видны всем классам пакета, в котором они объявлены и только им.
Этот модификатор еще иногда называют «package», так как доступ к переменным и методам открыт для всего пакета, в котором находится их класс.private
Область доступа - только из своего класса (в котором объявлен): помеченные им методы и поля (переменные) доступны (видны и могут быть использованы) только в этом классе.
К переменной или методу, помеченному модификатором private, можно обращаться только из того же класса, где он объявлен. Для всех остальных классов помеченный метод или переменная невидимы.
Это самая высокая степень закрытости – только свой класс.
protected
Область доступа - из своего класса (в котором объявлен) и его потомков: помеченные им методы и поля доступны (видны и могут быть использованы) только в этом классе или в классах, наследующих его с помощью extends. (внутри пакета и в наследниках)
Последовательность слов-модификаторов по убыванию уровня закрытости: private, default, protected, public.
*Во время наследования возможно изменения модификаторов доступа в
сторону большей видимости - это сделано для того, чтобы не нарушался
принцип LSP (Liskov substitution principle) для наследуемого класса.
Модификатор | Доступ из своего класса (в котором объявлен) | Доступ для классов своего пакета | Доступ из любого класса |
---|---|---|---|
public | + | + | + |
без модификатора (package) | + | + | - |
private | + | - | - |
Комментариев нет:
Отправить комментарий