首頁 >Java >java教程 >不同套件中的子類別可以直接存取超類別的受保護成員嗎?

不同套件中的子類別可以直接存取超類別的受保護成員嗎?

Susan Sarandon
Susan Sarandon原創
2024-12-07 16:30:15762瀏覽

Can Subclasses in Different Packages Directly Access a Superclass's Protected Members?

了解Java 中的受保護存取

在Java 中,protected 修飾符旨在允許存取同一包中的某些成員以及同一包中的某些成員子類別在其他包中。但是,當從子類別外部的超類別實例存取受保護成員時,會出現一個常見的誤解。

考慮以下範例:

// Class A
package package1;
public class A {
    protected int protectedInt = 1;
}

// Class C
package package2;
import package1.A;
public class C extends A {
    public void go() {
        A a = new A();
        System.out.println(a.publicInt);
        System.out.println(a.protectedInt); // Eclipse underlines this line
    }
}

Eclipse 在 a. 行上引發錯誤。 protectedInt 被訪問,聲稱它不可見。這似乎與Java 中protected 的定義相矛盾:「protected 修飾符指定該成員只能在其自己的包內訪問(與package-private 一樣),此外,還可以由另一個包中該類的子類訪問。的定義,因為它只適用於子類別。具體來說,僅允許在子類體內存取受保護成員。

因此,可以從 C 類內部存取受保護成員 protectedInt,但僅限於 C 類本身的實例或 C 類子類的實例。即使它們位於同一個套件中,也無法直接從超類別的實例存取。 要解決 go 方法中的錯誤,您需要建立 C 類別的實例A 類別的:

這將透過子類別實例正確存取受保護的成員。

以上是不同套件中的子類別可以直接存取超類別的受保護成員嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn