簡體   English   中英

子類的對象可以訪問另一個子類的另一個對象的受保護字段嗎?

[英]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對象eex受保護字段name 這似乎與我在本書中引用的內容相矛盾,特別是我用粗體突出顯示的部分。

有人可以解釋我這本書是錯的還是我的理解錯了? 如果我的理解是錯誤的,你能提出一個更好的例子來理解這本書的含義嗎?

由於您的類都在同一個包中,因此protected與public相同。

protected修飾符指定只能在其自己的包中訪問該成員(與package-private一樣),此外,還可以在另一個包中通過其類的子類訪問該成員。

https://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM