Ответ
Модификатор protected в Java определяет уровень доступа к членам класса (полям, методам, конструкторам). Доступ к protected-члену разрешен из:
- Того же класса.
- Классов-наследников (подклассов), даже если они находятся в другом пакете.
- Классов внутри того же пакета (как и при
default(package-private) доступе).
Пример:
// Файл: animals/Animal.java
package animals;
public class Animal {
protected String name; // Доступно в подклассах и пакете animals
protected void eat() {
System.out.println(name + " is eating");
}
}
// Файл: pets/Dog.java (другой пакет, но наследник)
package pets;
import animals.Animal;
public class Dog extends Animal {
public void bark() {
name = "Rex"; // OK: protected поле доступно в подклассе
eat(); // OK: protected метод доступен в подклассе
}
}
Когда использовать: protected применяется, когда нужно скрыть реализацию от внешнего кода, но предоставить доступ для расширения функциональности в классах-наследниках (например, в шаблонном методе).