關於Java中方法重寫的訪問修飾符和返回值型別的限制
阿新 • • 發佈:2019-02-11
眾所周知,Java中方法重寫的要求是方法簽名完全相同。
方法簽名是指 方法名+引數列表 。
而父類中或介面中的方法的時候重寫方法的時候,除了方法簽名完全相同之外,訪問修飾符和返回值型別有什麼限制嗎?
答案是肯定的。
訪問修飾符的開放範圍由大到小排序是 public > protected > default > private
private型別是子類無法繼承下來的, 所以父類中private修飾的方法並不能被子類重寫。
廢話不多說,接下來進入重點。
經過筆者的多次測試,發現訪問修飾符和返回值型別雖然不必與父類中的方法相同,但也不是完全沒有限制。
方法重寫時:
子類中方法的訪問修飾符必須 >= 父類中對應方法的訪問修飾符 (訪問修飾符大小關係已在本文中列出)
子類中方法的返回值型別可以和被重寫方法的返回值型別相同,或者是被重寫方法型別的子型別。
即 子類中方法的返回值型別必須 <= 父類中對應方法的返回值型別
以上結論對於抽象方法的實現同樣適用。
因為在JDK1.7及以前的版本中,介面中所有的方法都預設是public型別的。所以說介面中的方法被重寫時,其子類重寫方法的訪問修飾符必須是public.
由於筆者水平有限,還請大家多多批評指正。