Ключевое слово protected
Ключевое слово protected является модификатором доступа
и применяется к полям, методам, конструкторам и вложенным классам.
Член класса, помеченный как protected, доступен:
внутри самого класса, в котором он объявлен;
внутри всех классов того же пакета;
в классах-наследниках, даже если они находятся в другом пакете.
В отличие от private, модификатор protected
открывает доступ наследникам, а в отличие от public -
скрывает член от всех остальных классов за пределами пакета.
Важно помнить, что в другом пакете наследник может обращаться
к protected-члену только через ссылку типа самого наследника,
но не через ссылку типа родителя.
Синтаксис
protected type name;
protected type name(args);
protected class Name { }
Пример
Давайте объявим поле value с модификатором
protected и обратимся к нему из класса-наследника
в том же пакете:
public class Main
{
public static void main(String[] args)
{
Child child = new Child();
child.show();
}
}
class Parent
{
protected int value = 42;
}
class Child extends Parent
{
public void show()
{
System.out.println(value);
}
}
Результат выполнения кода:
42
Пример
Давайте объявим protected-метод print
и вызовем его из класса-наследника:
public class Main
{
public static void main(String[] args)
{
Child child = new Child();
child.callPrint();
}
}
class Parent
{
protected void print()
{
System.out.println("abcde");
}
}
class Child extends Parent
{
public void callPrint()
{
print();
}
}
Результат выполнения кода:
"abcde"
Пример
Давайте покажем, что protected-член доступен
всем классам того же пакета, даже если они не являются
наследниками:
public class Main
{
public static void main(String[] args)
{
Parent parent = new Parent();
System.out.println(parent.value);
}
}
class Parent
{
protected int value = 42;
}
Результат выполнения кода:
42