Модификаторы доступа Java
Модификаторы доступа Java используются для обеспечения контроля доступа в java. Java обеспечивает управление доступом с помощью трех ключевых слов — private, protected и public. Мы не обязаны использовать эти модификаторы доступа всегда, поэтому у нас есть еще один, а именно «доступ по умолчанию», «пакет-частный» или «без модификатора».
Модификаторы доступа Java
- Если класс является «общедоступным», то мы можем получить к нему доступ откуда угодно, т. е. из любого другого класса, расположенного в любых других пакетах и т. д.
- У нас может быть только один \общедоступный класс в исходном файле, и имя файла должно совпадать с именем общедоступного класса.
- Если у класса есть доступ по умолчанию, доступ к нему возможен только из других классов в том же пакете.
Модификаторы доступа Java с членом класса
У нас могут быть все четыре модификатора доступа для переменных и методов членов класса. Однако правила модификатора доступа к членам применяются после правил доступа на уровне класса. Например, если класс имеет доступ по умолчанию, то он не будет виден в других пакетах и, следовательно, методы и переменные класса также не будут видны. Мы рассмотрим каждый из них отдельно, а затем покажем использование модификаторов доступа 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(){}
}
Обратите внимание, что класс TestA имеет доступ по умолчанию, а метод закрытого класса доступен для всех других частей того же класса. TestB.java
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() {
}
}
Обратите внимание, что TestB находится в том же пакете, что и класс TestA, и, следовательно, он может получить доступ к членам своего класса. частные члены недоступны, но все остальные члены доступны из-за того же пакета. TestC.java
package com.journaldev.access.child;
import com.journaldev.access.TestB;
public class TestC {
public static void main(String[] args) {
new TestB().methodPublic();
}
}
Класс TestB доступен, потому что он общедоступен. Доступны только общедоступные члены класса TestB, поскольку класс TestC не находится в том же пакете и не является его подклассом TestB. TestE.java
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();
}
}
Поскольку класс TestE является подклассом TestB, мы можем получить доступ к защищенным членам TestB через дочерний класс TestE. Если мы попытаемся напрямую обратиться к защищенному методу суперкласса, мы получим ошибку времени компиляции. Это все, что касается модификаторов доступа java, это просто для понимания. Только не путайте с дефолтным и защищенным доступом. Простой способ запомнить, что доступ по умолчанию более ограничен, чем защищенные и защищенные члены доступны в подклассах. Недавно я сделал видео, чтобы подробно объяснить модификаторы доступа java, вы можете посмотреть его ниже на YouTube. https://www.youtube.com/watch?v=QKjnbC3UBtY