【发布时间】:2016-01-16 19:06:13
【问题描述】:
我从 Core Java, Volume I-Fundamentals (8th Edition) > Chapter 5: Inheritance > 'Protected Access' section (Page 205) 一书中学到了以下内容。
但是,有时您希望将方法限制为 仅允许子类访问,或者不太常见的情况下,允许子类方法访问 超类字段。在这种情况下,您将类功能声明为 受保护。例如,如果超类 Employee 声明 hiredDay 字段为受保护而不是私有,然后是经理 方法可以直接访问它。
但是,Manager 类的方法可以窥探hiredDay 字段的内部 仅包含 Manager 对象,而不包含其他 Employee 对象。 这 限制是为了你不能滥用受保护的机制 并形成子类只是为了访问受保护的字段。
我写了下面的代码来测试一下。
class Employee
{
protected String name;
public Employee(String name) {
this.name = name;
}
}
class Manager extends Employee
{
public Manager(String name) {
super(name);
}
public void peekName(Employee e) {
System.out.println("name: " + e.name);
}
}
class Executive extends Employee
{
public Executive(String name) {
super(name);
}
}
public class TestProtectedAccess
{
public static void main(String[] args) {
Employee e = new Employee("Alice Employee");
Manager m = new Manager("Bob Manager");
Executive ex = new Executive("Charles Executive");
// Manager object accessing protected name of Employee object
m.peekName(e);
// Manager object accessing protected name of Executive object
m.peekName(ex);
}
}
代码的输出是:
$ java TestProtectedAccess
name: Alice Employee
name: Charles Executive
Manager 对象m 能够访问其他Employee 对象e 和ex 的受保护字段name。这似乎与我上面从书中引用的内容相矛盾,尤其是我用粗体突出显示的部分。
如果这本书有误或我的理解有误,有人可以解释一下吗?如果我的理解有误,您能否提出一个更好的例子来理解这本书的意思?
【问题讨论】:
标签: java inheritance protected