檢查類別層次結構時,Eclipse 錯誤地將受保護欄位的訪問標記為無效。這種明顯的矛盾是由於對 protected 修飾符的預期功能的誤解而產生的。
根據 Java 語言規範 (JLS),受保護的成員可以在聲明類的包中以及該類的子類中訪問,無論子類的包。在本例中,類別 A 聲明了受保護欄位 protectedInt。
在給定的範例中,類別 C 擴充了類別 A,這表示 C 實例應該有權存取 A 的 protectedInt 欄位。然而,Eclipse 報告說,在 C 中使用 A 的實例時,存取被禁止。
解決方案在於理解受保護的存取僅限於聲明類別的子類別。因此,A 的 protectedInt 欄位只能由 C 的實例或 C 的子類別存取。這是 Eclipse 錯過的一個重要區別。
為了說明,透過C 的實例訪問protectedInt 將按預期工作:
C c = new C(); System.out.println(c.protectedInt); // Access to 'protectedInt' allowed
最終,protected 修飾符提供了對字段和方法的受控訪問,允許子類繼承它們,同時保持封裝在一個包裹。
以上是為什麼 Eclipse 將 Java 繼承中的受保護欄位存取標記為無效?的詳細內容。更多資訊請關注PHP中文網其他相關文章!