天天看點

方法重載與方法重寫(@Overload @Override)

java方法重載和方法重寫(方法覆寫)的差別:

  • 方法重載: Overload
  • 方法重寫: Override

批判,本身二者一點關系都沒有,僅僅隻是因為名字很像.

作用: 解決了同一個類中,相同功能的方法名不同的問題.

既然是相同的功能,那麼方法的名字就應該相同.

** 規則: 兩同一不同.**

同類中,方法名相同,方法參數清單不同(參數類型,參數個數,參數順序).

作用:解決子類繼承父類之後,可能父類的某一個方法不滿足子類的具體特征,此時需要重新在子類中定義該方法,并重寫方法體.

** 規則: 一同兩小,一大.**

一同:父類和子類的方法簽名是相同的,是以,建議:直接拷貝父類中方法的定義到子類中,再重寫方法體,就OK了.

方法重寫的原則(一同兩小一大):Override

一同:

① 執行個體方法簽名必須相同。 (方法簽名= 方法名 + 方法的參數清單)

兩小:

② 子類方法的傳回值類型是和父類方法的傳回類型相同或者是其子類。

子類可以傳回一個更加具體的類.(基本類型必須一樣,引用類型可以是其子類)

③ 子類方法聲明抛出的異常類型和父類方法聲明抛出的異常類型相同或者是其子類。

子類方法中聲明抛出的異常小于或等于父類方法聲明抛出異常類型;

子類方法可以同時聲明抛出多個屬于父類方法聲明抛出異常類的子類(RuntimeException類型除外);

一大:

④ 子類方法的通路權限比父類方法通路權 限更大或相等。

private修飾的方法不能被子類所繼承,也就不存在覆寫的概念.

判斷是否是覆寫方法的必殺技:

@Override标簽:若方法是覆寫方法,在方法前或上貼上該标簽, 編譯通過,否則,編譯出錯。

隻有方法存在覆寫的概念,字段沒有覆寫.

方法覆寫解決的問題: 當父類的某一個行為不符合子類具體的特征的時候,此時子類需要重新定義父類的方法,并重寫方法體.

方法重載的原則(兩同一不同)overload:

兩同:同類中,方法名相同;

一不同:方法參數清單不同(參數類型、參數個數、參數順序);

隻要參數類型,參數個數,參數順序有一個不同,參數清單就不同.

注意:方法重載和方法的傳回值類型無關,隻是一般要求傳回值類型一緻。

參數清單和參數的名稱沒關系,方法的重載和形參沒關系.

重載方法的定義是在同一個類中,某方法允許存在一個以上的同名方法,隻要它們的參數清單不同即可。