簡體   English   中英

為什么我可以用公共方法覆蓋受保護的方法?

[英]Why can I override a protected method with public method?

當我用public方法覆蓋protected方法時,Java 編譯器不會抱怨。 這里到底發生了什么? 由於父方法的可見性較低,它是覆蓋還是隱藏父方法?

子類總是可以加寬訪問修飾符,因為它仍然是超類的有效替代。 從 Java 規范中關於Overriding 和 Hiding 中的要求

覆蓋或隱藏方法的訪問修飾符(第 6.6 節)必須提供至少與覆蓋或隱藏方法一樣多的訪問,如下所示:

  • 如果被覆蓋或隱藏的方法是公共的,那么覆蓋或隱藏的方法必須是公共的; 否則,會發生編譯時錯誤。
  • 如果被覆蓋或隱藏的方法受保護,則覆蓋或隱藏的方法必須是受保護或公開的; 否則,會發生編譯時錯誤。
  • 如果被覆蓋或隱藏的方法具有默認(包)訪問權限,則覆蓋或隱藏的方法不能是私有的; 否則,會發生編譯時錯誤。

從外部類的角度來看,公共方法只是一個新方法,而不是覆蓋方法,因為外部類無論如何都無法訪問受保護的方法。

另一方面,降低可見性是不允許的,因為外部類總是可以使用超類類型的引用來引用子類的對象並調用相同的方法。

可見性僅影響外部可訪問性。 作為public方法,任何外部類都可以調用它。

覆蓋方法的訪問級別不會影響原始方法的可見性。 重寫后,任何訪問級別都只能通過在子類中調用super來訪問原始方法。

暫無
暫無

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

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