Автор оригинала: Pankaj Kumar.
Модификаторы доступа Java используются для обеспечения контроля доступа в java. Java обеспечивает управление доступом с помощью трех ключевых слов – private , protected и public . Мы не обязаны всегда использовать эти модификаторы доступа, поэтому у нас есть еще один, а именно ” доступ по умолчанию “, ” закрытый пакет ” или ” без модификатора “.
Модификаторы доступа Java
Мы можем использовать модификаторы доступа java с классами, а также переменными и методами классов.
Нам разрешено использовать только модификаторы доступа “общедоступный” или “по умолчанию” с классами java.
- Если класс является “общедоступным”, то мы можем получить к нему доступ из любого места, т. Е. из любого другого класса, расположенного в любых других пакетах и т.д.
- У нас может быть только один “общедоступный” класс в исходном файле, и имя файла должно совпадать с именем общедоступного класса.
- Если класс имеет “доступ по умолчанию”, то к нему можно получить доступ только из других классов в том же пакете.
Модификаторы доступа Java с членом класса
У нас могут быть все четыре модификатора доступа для переменных и методов-членов класса. Однако правила модификатора доступа к членам применяются после правил доступа на уровне класса. Например, если класс имеет доступ по умолчанию, то он не будет виден в других пакетах, и, следовательно, методы и переменные класса также не будут видны.
Мы рассмотрим каждый из них отдельно, а затем покажем использование модификаторов доступа java с помощью простой программы.
Модификаторы доступа Java – ключевое слово public
Если член класса является “общедоступным”, то к нему можно получить доступ из любого места. Доступ к переменной – члену или методу осуществляется глобально. Это самый простой способ предоставить доступ членам класса. Однако мы должны позаботиться об использовании этого ключевого слова с переменными класса, иначе любой может изменить значения. Обычно переменные класса хранятся как частные, и для работы с ними предоставляются методы getter-setter.
Модификаторы доступа Java – частное ключевое слово
Если член класса является “частным”, то он будет доступен только внутри того же класса. Это самый ограниченный доступ, и член класса не будет виден внешнему миру. Обычно мы сохраняем переменные класса как частные, а методы, которые предназначены для использования только внутри класса, как частные.
Модификаторы доступа Java – защищенное ключевое слово
Если член класса “защищен”, то он будет доступен только классам в том же пакете и подклассам . Этот модификатор менее ограничен для частного, но более ограничен для публичного доступа. Обычно мы используем это ключевое слово, чтобы убедиться, что переменные класса доступны только подклассам.
Модификаторы доступа Java – доступ по умолчанию
Если у члена класса не указан какой-либо модификатор доступа, то он обрабатывается доступом по умолчанию. Правила доступа аналогичны классам, и член класса с доступом по умолчанию будет доступен только классам в одном пакете. Этот доступ более ограничен, чем публичный, и защищен, но менее ограничен, чем частный.
(Наименее доступный) частный < по умолчанию < защищенный < общедоступный (Наиболее доступный)
В приведенной ниже таблице обобщены вышеуказанные модификаторы доступа в отношении различных классов в одном пакете или других пакетов и подклассов.
Давайте напишем несколько простых классов, в которых мы увидим модификаторы доступа java в действии.
Давайте напишем несколько простых классов, в которых мы увидим модификаторы доступа java в действии.
package com.journaldev.access; class TestA { public void methodPublic(){ methodPrivate(); } protected void methodProtected(){ methodPrivate(); } void methodDefault(){ methodPrivate(); } private void methodPrivate(){} }
Обратите внимание, что класс тестов имеет доступ по умолчанию, а метод закрытого класса доступен для всех других частей того же класса.
Обратите внимание, что класс тестов имеет доступ по умолчанию, а метод закрытого класса доступен для всех других частей того же класса.
package com.journaldev.access; import com.journaldev.access.TestA; public class TestB { public static void main(String args[]) { new TestA().methodPublic(); new TestA().methodProtected(); new TestA().methodDefault(); } public void methodPublic() { } protected void methodProtected() { } void methodDefault() { } private void methodPrivate() { } }
Обратите внимание, что тест находится в том же пакете, что и тест класса, и, следовательно, он может получить доступ к своим членам класса. частные участники недоступны, но все остальные участники доступны из-за одного и того же пакета.
Обратите внимание, что тест находится в том же пакете, что и тест класса, и, следовательно, он может получить доступ к своим членам класса. частные участники недоступны, но все остальные участники доступны из-за одного и того же пакета.
package com.journaldev.access.child; import com.journaldev.access.TestB; public class TestC { public static void main(String[] args) { new TestB().methodPublic(); } }
Класс TestB доступен, потому что он общедоступен. Доступны только общедоступные члены класса TestB, поскольку класс Test не входит в один и тот же пакет или его подкласс Test B.
Класс TestB доступен, потому что он общедоступен. Доступны только общедоступные члены класса TestB, поскольку класс Test не входит в один и тот же пакет или его подкласс Test B.
package com.journaldev.util; import com.journaldev.access.TestB; public class TestE extends TestB { public static void main(String[] args) { new TestB().methodPublic(); new TestB().methodProtected(); // compile time error // works, accessing super class protected method using subclass new TestE().methodProtected(); } }
Поскольку тестируемый класс является подклассом теста B, мы можем получить доступ к защищенным членам теста B через тест дочернего класса. Если мы попытаемся получить прямой доступ к методу, защищенному суперклассом, мы получим ошибку во время компиляции.
Это все для модификаторов доступа java, это просто понять. Просто не путайте с доступом по умолчанию и защищенным доступом.
Простой способ запомнить, что доступ по умолчанию более ограничен, чем защищенный, а защищенные члены доступны в подклассах.
Недавно я снял видео, в котором подробно объясняются модификаторы доступа java, вы можете посмотреть его ниже на YouTube.