TGViewer
Java Portal | Программирование Java Portal | Программирование @java_iibrary · 11.6K subscribers
Post #2086 1.95K
Про модификаторы доступа в Java (public / default / protected / private)

private - только для себя
public - откуда угодно
protected - вроде бы для подклассов?

На самом деле тут всегда начинается каша, если не смотреть на вопрос "откуда и кто вызывает" по двум осям: пакет и наследование.

Чтобы нормально понять модификаторы, я подумал: пусть будет статья с моделью "якинику-ресторан".

Что такое модификаторы на самом деле
:

Модификаторы - это не про "силу".
Это правила, откуда можно получить доступ.

В Java доступ всегда определяется двумя вещами:

* тот же пакет?
* есть наследование?

Модель с рестораном якинику:

* YakinikuShop: сам ресторан (родительский класс)
* LocalStaff: персонал этого же ресторана
* Manager: управляющий (дочерний класс)
* BranchStaff: персонал филиала (другой пакет + наследник)
* Customer: обычный клиент

Родительский класс: YakinikuShop.java

package shop;

public class YakinikuShop {

public int counter = 30; // Стойка/места: видно всем
int staffRoom = 10; // Комната персонала: только для своего пакета
protected int kitchen = 20; // Кухня: свой пакет или наследники
private int safeMoney = 100; // Сейф: даже управляющему напрямую нельзя

public void askManagerToOpenSafe(Object person) {
if (!(person instanceof Manager)) {
System.out.println("❌ Только управляющий может открыть сейф");
return;
}
openSafe();
}

private void openSafe() {
System.out.println("open safe: " + safeMoney);
}
}


Почему askManagerToOpenSafe "особенный"

askManagerToOpenSafe - public.
То есть вызвать его может кто угодно.

Но откроется сейф или нет - решает проверка instanceof внутри.

public != "можно всё"
public = "вход виден и доступен"

Суть public вот такая:

* ✅может вызвать клиент
* ✅может вызвать персонал
* ✅может вызвать кто-то из другого магазина

"Встать у входа и попросить" можно, но:

* ❌ если ты не управляющий - тебя сразу разворачивают
* ❌ private-сейф напрямую трогать нельзя

Таблица доступа:

Клиент:

public: ✅
default: ❌
protected: ❌
private: ❌

Персонал этого же ресторана (тот же пакет):

public: ✅
default: ✅
protected: ✅
private: ❌

Персонал филиала (другой пакет, но наследник):

public: ✅
default: ❌
protected: ✅
private: ❌

Управляющий (дочерний класс):

public: ✅
default: ✅
protected: ✅
private: ❌

Сам класс YakinikuShop:

public: ✅
default: ✅
protected: ✅
private: ✅

👉 Java Portal
  • 🤔 7
  • 🔥 4
  • ❤ 2
  • 👍 2
More from @java_iibrary
  1. Sep 28, 2026Проблема в продакшене. Приложение зависло. Вы запускаете: jstack <pid> Через несколько сек…
  2. Sep 27, 2026Java-разработчики, CopyOnWriteArrayList создаёт копию всего внутреннего массива при каждом…
  3. Sep 27, 2026Java-разработчики, ConcurrentHashMap потокобезопасен. Но он не блокирует всю коллекцию при…
  4. Sep 26, 2026Во многих приложениях есть такой эндпоинт. Фронтенд удаляет JWT после того, как пользовате…
  5. Sep 26, 2026Java: используйте Deque вместо Stack для работы по принципу LIFO («последним пришёл — перв…
  6. Sep 25, 2026Каждый Java-разработчик использует HashMap. Но задумывались ли вы… Почему его ёмкость всег…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →