Поиск по сайту:

Модификаторы доступа Java


Модификаторы доступа Java используются для обеспечения контроля доступа в java. Java обеспечивает управление доступом с помощью трех ключевых слов — private, protected и public. Мы не обязаны использовать эти модификаторы доступа всегда, поэтому у нас есть еще один, а именно «доступ по умолчанию», «пакет-частный» или «без модификатора».

Модификаторы доступа Java

  1. Если класс является «общедоступным», то мы можем получить к нему доступ откуда угодно, т. е. из любого другого класса, расположенного в любых других пакетах и т. д.
  2. У нас может быть только один \общедоступный класс в исходном файле, и имя файла должно совпадать с именем общедоступного класса.
  3. Если у класса есть доступ по умолчанию, доступ к нему возможен только из других классов в том же пакете.

Модификаторы доступа 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