java方法重載和方法重寫(方法覆蓋)的區(qū)別:
- 方法重載: Overload
- 方法重寫: Override
批判,本身二者一點關系都沒有,僅僅只是因為名字很像.
方法重載: Overload
作用: 解決了同一個類中,相同功能的方法名不同的問題.
既然是相同的功能,那么方法的名字就應該相同.
** 規(guī)則: 兩同一不同.**
同類中,方法名相同,方法參數(shù)列表不同(參數(shù)類型,參數(shù)個數(shù),參數(shù)順序).
方法重寫: Override
作用:解決子類繼承父類之后,可能父類的某一個方法不滿足子類的具體特征,此時需要重新在子類中定義該方法,并重寫方法體.
** 規(guī)則: 一同兩小,一大.**
一同:父類和子類的方法簽名是相同的,所以,建議:直接拷貝父類中方法的定義到子類中,再重寫方法體,就OK了.
方法重寫的原則(一同兩小一大):Override
一同:
① 實例方法簽名必須相同。 (方法簽名= 方法名 + 方法的參數(shù)列表)
兩小:
② 子類方法的返回值類型是和父類方法的返回類型相同或者是其子類。
子類可以返回一個更加具體的類.(基本類型必須一樣,引用類型可以是其子類)
③ 子類方法聲明拋出的異常類型和父類方法聲明拋出的異常類型相同或者是其子類。
子類方法中聲明拋出的異常小于或等于父類方法聲明拋出異常類型;
子類方法可以同時聲明拋出多個屬于父類方法聲明拋出異常類的子類(RuntimeException類型除外);
一大:
④ 子類方法的訪問權(quán)限比父類方法訪問權(quán) 限更大或相等。
private修飾的方法不能被子類所繼承,也就不存在覆蓋的概念.
判斷是否是覆寫方法的必殺技:
@Override標簽:若方法是覆寫方法,在方法前或上貼上該標簽, 編譯通過,否則,編譯出錯。
只有方法存在覆蓋的概念,字段沒有覆蓋.
方法覆蓋解決的問題: 當父類的某一個行為不符合子類具體的特征的時候,此時子類需要重新定義父類的方法,并重寫方法體.
方法重載的原則(兩同一不同)overload:
兩同:同類中,方法名相同;
一不同:方法參數(shù)列表不同(參數(shù)類型、參數(shù)個數(shù)、參數(shù)順序);
只要參數(shù)類型,參數(shù)個數(shù),參數(shù)順序有一個不同,參數(shù)列表就不同.
注意:方法重載和方法的返回值類型無關,只是一般要求返回值類型一致。
參數(shù)列表和參數(shù)的名稱沒關系,方法的重載和形參沒關系.
重載方法的定義是在同一個類中,某方法允許存在一個以上的同名方法,只要它們的參數(shù)列表不同即可。