首頁 >Java >java教程 >為什麼不同套件中的子類別不能存取 Java 中其超類別的受保護成員?

為什麼不同套件中的子類別不能存取 Java 中其超類別的受保護成員?

DDD
DDD原創
2024-12-08 22:51:11732瀏覽

Why Can't a Subclass in a Different Package Access a Protected Member of its Superclass in Java?

瀏覽Java 的受保護存取修飾符

答案:

這種誤解是由授予受保護訪問的特定上下文引起的。 JLS(第 6.6.2 節)澄清了受保護的成員確實可以從其他套件中的子類別訪問,但僅限於子類別的實例或子類別的子類別的實例。 具體來說,受保護的成員只能是如果E 的類型是,則透過欄位存取表達式(例如,E.Id)或方法呼叫表達式(例如,E.Id(.. .))存取子類別本身(即S)或S 的子類別。

在給定場景中,嘗試存取 a.protectedInt 的程式碼使用 A 的實例作為表達式 E。由於 A 不是子類別對於 C 來說,根據 JLS 規則,這種存取是不允許的。

因此,protected 修飾符會授予對子類別中受保護成員的存取權限,但僅限於子類別的實例或它的子類別。

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

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