Вопрос по книге Хорстманна
читаю Хорстманна, 1-й том. Глава 5.1.10 Защищенный доступ.
Далее текст из книги (класс Manager extends Employee):
Как известно, поля в классе желательно объявлять как private, а некоторые методы — как public. Любые закрытые (т.е. private ) компоненты программы невидимы из других классов. Это утверждение справедливо и для подклассов: у подкласса отсутствует доступ к закрытым полям суперкласса.
Но иногда приходится ограничивать доступ к некоторому методу и открывать его лишь для подклассов. Реже возникает потребность предоставлять методам из подкласса доступ к полям в суперклассе. В таком случае компонент класса объявляется защищенным с помощью модификатора доступа, обозначаемого ключевым словом protected.
Так, если поле hireDay объявлено в суперклассе Employee защищенным, а не закрытым, методы из подкласса Manager смогут обращаться к нему непосредственно. Но методам из класса manager доступны лишь поля hireday, принадлежащие объектам самого класса manager, но не класса employee. Это ограничение введено в качестве предупредительной меры против злоупотреблений механизмом защищенного доступа, не позволяющим создавать подклассы лишь для того, чтобы получить доступ к защищенным полям.
Т.е. они хотят сказать, что я не смогу написать в классе Manager метод, который будет принимать в качестве явного аргумента некоторый объект класса Employee и в этом методе я не смогу получить значение hireDay этого объекта Employee?
Ну вот я написал код, где я вполне получаю значение этого поля... Помогите пожалуйста понять, что они хотели сказать?
public class Test {
public static void main(String[] args) {
Employee emp = new Employee(5);
Manager mng = new Manager(6);
int number = mng.method_1(emp);
System.out.println(number);
}
}
class Employee {
protected int hireDay;
public Employee(int hireDay) {
this.hireDay = hireDay;
}
public int getHireDay() {
return this.hireDay;
}
}
class Manager extends Employee {
public Manager(int hireDay) {
super(hireDay);
}