[英]Can an object of a subclass access protected field of another object of another subclass?
我從“核心Java,第I卷 - 基礎知識(第8版)”>第5章:繼承>“受保護的訪問”一節(頁221)一書中學到了以下內容。
但是,有時候,您只想將方法限制為子類,或者不太常見,允許子類方法訪問超類字段。 在這種情況下,您將類功能聲明為protected。 例如,如果超類Employee將hireDay字段聲明為protected而不是private,則Manager方法可以直接訪問它。
但是, Manager類方法只能查看Manager對象的hireDay字段,而不能查看其他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
。 這似乎與我在本書中引用的內容相矛盾,特別是我用粗體突出顯示的部分。
有人可以解釋我這本書是錯的還是我的理解錯了? 如果我的理解是錯誤的,你能提出一個更好的例子來理解這本書的含義嗎?
由於您的類都在同一個包中,因此protected與public相同。
protected修飾符指定只能在其自己的包中訪問該成員(與package-private一樣),此外,還可以在另一個包中通過其類的子類訪問該成員。
https://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.