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

Модификаторы доступа в Java используются для обеспечения контроля доступа в Java. Java предоставляет контроль доступа с помощью трех ключевых слов – private, protected и public. Всегда не обязательно использовать эти модификаторы доступа, поэтому у нас есть еще один, а именно “доступ по умолчанию“, “пакетный доступ package-private” или “без модификатора no modifier“.

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

Мы можем использовать модификаторы доступа Java с классами, а также с переменными и методами класса. Мы можем использовать только модификаторы доступа “public” или “default” с классами Java.

  1. Если класс “public”, то к нему можно получить доступ откуда угодно, то есть из любого другого класса, расположенного в любом другом пакете и т. д.
  2. Мы можем иметь только один класс “public” в исходном файле, и имя файла должно совпадать с именем публичного класса.
  3. Если у класса “доступ по умолчанию”, то к нему можно получить доступ только из других классов в том же пакете.

Модификаторы доступа Java с членом класса

Мы можем использовать все четыре модификатора доступа для переменных и методов членов класса. Однако правила модификатора доступа члена применяются после правил доступа на уровне класса. Например, если у класса установлен доступ по умолчанию, то он не будет виден в других пакетах, и, следовательно, методы и переменные класса также не будут видны. Мы рассмотрим каждый из них отдельно, а затем покажем использование модификаторов доступа в Java на примере простой программы.

Модификаторы доступа в Java – ключевое слово public

Если член класса “public”, то он может быть доступен отовсюду. Переменная члена или метод доступны глобально. Это самый простой способ предоставления доступа к членам класса. Однако следует быть осторожным при использовании этого ключевого слова с переменными класса, иначе любой может изменить их значения. Обычно переменные класса оставляются закрытыми, и для работы с ними предоставляются методы-геттеры и методы-сеттеры.

Модификаторы доступа в Java – ключевое слово private

Если член класса является “private”, то он будет доступен только внутри того же класса. Это самый ограниченный доступ, и член класса не будет виден внешнему миру. Обычно мы устанавливаем переменные класса как private и методы, которые предназначены для использования только внутри класса, также как private.

Модификаторы доступа в Java – ключевое слово protected

Если член класса является “protected”, то он будет доступен только классам в том же пакете и подклассам. Этот модификатор менее ограничен, чем private, но более ограничен, чем public. Обычно мы используем это ключевое слово, чтобы убедиться, что переменные класса доступны только подклассам.

Модификаторы доступа в Java – доступ по умолчанию

Если у члена класса не указан модификатор доступа, то он обрабатывается как доступ по умолчанию. Правила доступа аналогичны классам, и член класса с доступом по умолчанию будет доступен только классам в том же пакете. Этот доступ более ограничен, чем public и protected, но менее ограничен, чем private. (Наименее доступный) private < default < protected < public (Наиболее доступный) Ниже приведена таблица, кратко описывающая вышеупомянутые модификаторы доступа относительно различных классов в одном и том же пакете или других пакетах и подклассах. Давайте напишем несколько простых классов, где мы увидим действие модификаторов доступа Java. TestA.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 не находится в том же пакете, ни является его подклассом. 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

		 // работает, обращение к защищенному методу суперкласса с использованием подкласса
		new TestE().methodProtected();

	}

}

Поскольку класс TestE является подклассом TestB, мы можем получить доступ к защищенным членам TestB через дочерний класс TestE. Если мы попытаемся обратиться к защищенному методу суперкласса напрямую, мы получим ошибку времени компиляции. Вот и все, что касается модификаторов доступа в Java, это просто понять. Просто не путайтесь с доступом по умолчанию и защищенным доступом. Легкий способ запомнить заключается в том, что доступ по умолчанию более ограничен, чем защищенный, и защищенные члены доступны в подклассах. Недавно я сделал видео, чтобы подробно объяснить модификаторы доступа в Java, вы можете посмотреть его ниже на YouTube. https://www.youtube.com/watch?v=QKjnbC3UBtY

Source:
https://www.digitalocean.com/community/tutorials/java-access-modifiers