在Java編程中,覆蓋、重載和重寫都是比較常見的術(shù)語。但是,這些術(shù)語之間的區(qū)別可能大家并不清楚。下面我們來分別介紹一下它們的含義和區(qū)別。
一、覆蓋(Overriding)
覆蓋,也稱為方法的“重載”(override),是指子類在繼承父類時(shí),重新定義和實(shí)現(xiàn)父類中已經(jīng)存在的方法。覆蓋后的方法具有相同的名稱、參數(shù)、返回類型,但實(shí)現(xiàn)方式和父類中的方法不同。
二、重載(Overloading)
重載是指在同一個(gè)類中定義方法,它們擁有相同的方法名,但參數(shù)類型或參數(shù)個(gè)數(shù)不同。
三、重寫(Overwriting)
重寫是指在繼承關(guān)系中,子類定義了與父類完全相同的方法,包括方法名、參數(shù)列表及返回值類型,但是重新實(shí)現(xiàn)了這個(gè)方法。重寫的方法在運(yùn)行時(shí)會調(diào)用子類中的方法。
以上三種方法相似之處在于都涉及到方法的定義和實(shí)現(xiàn),但是它們的區(qū)別也很明顯。覆蓋和重寫的用途是為了實(shí)現(xiàn)多態(tài),而重載則是為了方便程序員進(jìn)行編程。
總結(jié)以上三種方法的區(qū)別:
1、覆蓋重載的方法名必須相同;重載和重寫的方法名可以不同。
2、覆蓋和重寫是實(shí)現(xiàn)多態(tài)的關(guān)鍵;重載不是實(shí)現(xiàn)多態(tài)的手段。
3、覆蓋是子類對父類方法的修改,重載是同一個(gè)類中多個(gè)方法之間的區(qū)別;重寫是子類對父類方法的“重寫”。
4、覆蓋和重寫用于實(shí)現(xiàn)動態(tài)綁定,重載用于靜態(tài)綁定。