Ответ
protected — модификатор, который разрешает доступ к члену класса (полю или методу) из:
- Того же пакета.
- Любого класса-наследника, даже если он находится в другом пакете.
Пример:
class Parent {
protected int protectedValue = 42;
private int privateValue = 100; // Недоступен наследнику
}
class Child extends Parent {
void printValues() {
System.out.println(protectedValue); // Доступ разрешен
// System.out.println(privateValue); // Ошибка компиляции: private
}
}
Сравнение с другими модификаторами:
private— доступ только внутри объявляющего класса.default(package-private) — доступ только внутри того же пакета.public— доступ отовсюду.
Ответ 18+ 🔞
А, ну это про protected, да? Ёпта, классика, вечно её с чем-то путают. Сейчас разложу по полочкам, чтобы у тебя в голове всё встало на свои места, а не болталось как манда с ушами.
Представь себе, что у тебя есть класс-родитель, типа такой семейной реликвии. И есть поле в нём, помеченное protected. Это как семейный секрет, который ты можешь:
- Рассказать всем родственникам, которые живут с тобой в одной квартире (в одном пакете). Им всё можно.
- Шёпотом передать своему сыну, даже если он уехал жить в другой город (в другой пакет). Наследникам — тоже зелёный свет.
А вот соседу с пятого этажа (какому-то случайному классу из другого пакета) ты этот секрет не расскажешь. Ему доверия — ноль ебать.
Вот смотри, наглядный пиздец, то есть пример:
class Parent {
protected int secretIngredient = 42; // Секретный ингредиент семейного соуса
private int bankPassword = 100; // А это уже совсем своё, приватное
}
class Child extends Parent {
void tryToKnowEverything() {
System.out.println(secretIngredient); // Всё ок, сынок, знай наш секрет. 42.
// System.out.println(bankPassword); // А вот это, сынок, нихуя. Ошибка компиляции.
}
}
Видишь? Наследник (Child) может спокойно трогать protected поле. А вот private — это уже за гранью, это личное дело родителя, туда даже родная кровь не пускается.
А теперь, чтобы вообще не было сомнений, вот тебе вся иерархия доступа, от самого жадного до самого распиздяйского:
private— это как твой личный дневник в сейфе. Только ты (твой класс). Всё. Наследники пусть идут нахуй, они него не увидят нихуя.default(он же package-private) — это как общий холодильник на общей кухне (в пакете). Все, кто живёт в этой квартире (в пакете), могут туда лазить. А кто с другой улицы (из другого пакета) — нет, даже если он твой брат (наследник).protected— это наш сегодняшний герой. Всем в пакете + всем детям, даже уехавшим. Идеальный баланс для семейных дел.public— это вывесить информацию на доску объявлений на центральной площади. Всем, везде, всегда. Полный распиздяйский режим.
Запомни эту разницу, а то потом будешь охуевать, почему наследник в другом пакете не видит твоих полей. Всё просто, если знать правила.