1. 程式人生 > >第七天 繼承之方法重寫

第七天 繼承之方法重寫

apple 能夠 clas res 如果 功能 擴展 nbsp 大於

方法重寫又稱方法覆蓋java中子類可以繼承父類中的方法,而不需要重新編寫相同的方法.但有時子類並不想原封不動的繼承父類的方法而是想做一定的修改,著時候就需要采用方法的重寫

方法覆蓋的註意事項:

1權限:子類的的權限(訪問修飾符)一定要不小於被重新的方法的權限(訪問修飾符)

2方法定義:方法名和參數列表必須一樣

3返回值:基本數據類型:子類和父類的必須一置

引用數據類型:子類可以與父類相同也可以是父類的子類

4拋出異常:子類拋出的異常不能超過父親拋出的異常(子類的異常不能大於父類的異常)

5不能被繼承就不能被重寫

6不能重新final修飾的方法

:

將方法或類聲明為final主要的目的就是:確保他們不會改變語義.

7靜態方法不能被重寫.如果子類也有一個與父類同名同參也用static修飾,那麽子類就會把繼承來的父類方法隱藏而不是重寫.簡單來說父類和子類的方法是兩個方法, 沒有關系,也不存在多態的性質,靜態方法是與類相關聯的

父類的非靜態方法不能被子類覆蓋為靜態方法,相反的父類的靜態也不能覆蓋為非靜態

重載和重寫的對比

重載:

權限修飾符(public private 默認):無關

方法名:重載的兩個方法的方法名必須相同

形參列表:

形參類型的順序不同

形參的個數不同

形參的類型不同

三者至少滿足一個

返回值類型:

重載與返回值類型無關

重寫:

權限修飾符(public private 默認):

子類方法的權限>=父類的方法的權限

方法名:

子類方法和父類方法必須相同

形參列表:

子類方法和父類方法的形參列表必須相同

返回值類型:

基本類數據類型:

必須相同

引用數據類型:

子類方法的返回值類型和父類方法的返回值類型相同

或者

子類方法的返回值類型是父類方法的返回值類型的子類

關於方法重載的一個原則

Liskov替換原則

核心抽象

為什麽要有這個原則

一個功能p1,由父類完成,現在需要增加新的功能p2,繼承之後,擴展為p3 這個p3是由p1和p2組成的,子類在完成新功能p2的時候可能使得p1發生故障

什麽是這個原則

所有引用基類(父類)的地方必須能透明地使用其子類的對象。

簡單來說就是對於子類型必須能夠替換掉他們的基類型,

再簡單點:子類可以擴展父類的功能,但不能改變父類的功能

4層次含義

  1. 子類可以實現父類的抽象方法,但不能覆蓋父類的抽象方法(關鍵所在)

  2. 當然這個不是硬性的規定而是一個建議,增加新的功能,盡可能不去重載父類的方法,而是盡力添加新的方法

  3. 子類可以增加自己的特有方法

  4. 子類實現父類的方法時,方法的形參不父類更加寬松.

  5. 子類實現父類方法時,方法的返回值比父類更加嚴格


第七天 繼承之方法重寫