深入解析Java重寫 - 返回值、修飾符必須一致?

重寫是子類對父類的允許訪問的方法的實現過程進行重新編寫, 返回值和形參都不能改變。即外殼不變,核心重寫!

重寫的好處在於子類可以根據需要,定義特定於自己的行爲。 也就是說子類能夠根據需要實現父類的方法。

重寫方法不能拋出新的檢查異常或者比被重寫方法申明更加寬泛的異常。例如: 父類的一個方法申明瞭一個檢查異常 IOException,但是在重寫這個方法的時候不能拋出 Exception 異常,因爲 Exception 是 IOException 的父類,只能拋出 IOException 的子類異常。

在面向對象原則裏,重寫意味着可以重寫任何現有方法。

方法的重寫規則

參數列表必須完全與被重寫方法的相同。

返回類型與被重寫方法的返回類型可以不相同,但是必須是父類返回值的派生類(java5 及更早版本返回類型要一樣,java7 及更高版本可以不同)。

訪問權限不能比父類中被重寫的方法的訪問權限更低。例如:如果父類的一個方法被聲明爲 public,那麼在子類中重寫該方法就不能聲明爲 protected。

父類的成員方法只能被它的子類重寫。

聲明爲 final 的方法不能被重寫。

聲明爲 static 的方法不能被重寫,但是能夠被再次聲明。

子類和父類在同一個包中,那麼子類可以重寫父類所有方法,除了聲明爲 private 和 final 的方法。

子類和父類不在同一個包中,那麼子類只能夠重寫父類的聲明爲 public 和 protected 的非 final 方法。

重寫的方法能夠拋出任何非強制異常,無論被重寫的方法是否拋出異常。但是,重寫的方法不能拋出新的強制性異常,或者比被重寫方法聲明的更廣泛的強制性異常,反之則可以。

構造方法不能被重寫。

如果不能繼承一個方法,則不能重寫這個方法。

Super 關鍵字

當需要在子類中調用父類的被重寫方法時,要使用 super 關鍵字。

問:java瘋狂講義中說重寫返回值類型要比父類小,在eclipse中驗證,重寫返回值類型必須一致,那麼Java重寫返回值類型必須一樣嗎?

答:java 5或者以前,必須一樣,java 7 java 8可以不同,但是必須是父類返回值的派生類。

問:Java重寫要求子類跟父類的修飾符一樣嗎?

答:子類重寫父類的方法的訪問修飾符,不能低於父類的方法訪問權限;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章