首先,來了解一下“重載”和“覆寫”的區別:
重載:
(1)方法重載是讓類以統一的方式處理不同類型數據的一種手段。多個同名函數同時存在,具有不同的參數個數/類型。重載Overloading是一個類中多態性的一種表現。
(2)Java的方法重載,就是在類中可以創建多個方法,它們具有相同的名字,但具有不同的參數和不同的定義。調用方法時通過傳遞給它們的不同參數個數和參數類型來決定具體使用哪個方法, 這就是多態性。
(3)重載的時候,方法名要一樣,但是參數類型和個數不一樣,返回值類型可以相同也可以不相同。無法以返回型別作為重載函數的區分標准。
覆寫(即重寫):
(1) 父類與子類之間的多態性,對父類的函數進行重新定義。如果在子類中定義某方法與其父類有相同的名稱和參數,我們說該方法被重寫 (Overriding)。在Java中,子類可繼承父類中的方法,而不需要重新編寫相同的方法。但有時子類並不想原封不動地繼承父類的方法,而是想作一定的修改,這就需要采用方法的重寫。方法重寫又稱方法覆蓋。
(2) 若子類中的方法與父類中的某一方法具有相同的方法名、返回類型和參數表,則新方法將覆蓋原有的方法。如需父類中原有的方法,可使用super關鍵字,該關鍵字引用了當前類的父類。
(3) 子類函數的訪問修飾權限不能少於父類的
再來談談@Override:
@Override不是關鍵字,但是可以把它當做關鍵字來使用。當你想要覆寫某個方法時,可以添加這個注解。在不小心重載而非覆寫了該方法時,編譯器就會生成一條錯誤信息。
簡單的說@Override有如下好處:
(1)可以當注釋用,方便閱讀;
(2)編譯器可以給你驗證@Override下面的方法是否是你父類中所有的,如果不是則報錯。例如,你想重寫父類中的某個方法,如果沒寫@Override,而你下面的方法又寫錯了,比如參數類型個數或者方法名不同,這時你的編譯器是可以編譯通過的,因為編譯器以為這個方法是你的子類中自己增加的方法。