重寫(overwrite)、過載(overload)和覆蓋(override)三者之間的區別
關於這三者之間,有很多書都說方法的過載就是方法的重寫,也有很多書將兩者加以區分,當然,也有很多書將覆蓋和過載合併。正所謂人言可謂,我現在都開始懷疑我以前認為的兩者說是不是正確的,當然,我不是認為兩者說屬於謬論。可是別人的三說論也有道理。我思索了半天也弄不清楚該信誰的。算了,不就一個概念嗎,先記下。
兩者說:有過載(覆蓋)和重寫一說。(出自哪裡忘了,是從筆記中找到的……)其中:
過載:就是子類從父類中繼承的同名方法,子類可以在這方法中重新定義自己的方法的實現。是子類對父類方法的再載入。
重寫:就是一個類中的方法同名,但是形參的型別和個數不一樣,這叫做重寫。
兩者說:有重寫(覆蓋)和過載一說。出自《Java語言程式設計》其中:
重寫:就是子類中有方法名和父類中的方法名稱相同,但是實現不一樣,這叫做重寫。
過載:一個類中,具有多個方法,這些方法的名稱相同,但是方法簽名不一樣(也就是形參的型別和個數及返回值不一樣),這就叫方法的過載。
三者說:有過載、重寫和覆蓋。出自《Java高手真經之Java核心程式設計技術》其中:
覆蓋:子類繼承了父類的同名無參函式。當子類從父類繼承了一個無參函式,而又定義了一個同樣的無參函式,則子類定義的方法覆蓋父類的方法,稱為覆蓋。
過載:子類繼承了父類的同名有參函式。當子類繼承了父類的一個同名方法,且方法引數不同,稱為過載。通過方法的過載,子類可以重新實現父類的某些方法,使其具有自己的特徵。
重寫:當前類的同名方法。通過方法的重寫,一個類可以有多個具有相同名字的方法,由傳遞給它們不同的個數和型別的引數來決定使用哪種方法。因此,重寫的名稱是當前類中的同名函式,不是父類中的函式名。