Java中的覆蓋和重載是面向對象編程中常見的概念,它們都可以用來實現多態性,但是它們還是有一些不同的,本文將對它們做一個總結。
覆蓋——Override
覆蓋的概念是子類覆蓋父類中的方法,在子類中重新定義一個與父類中同名、同參數的方法。 覆蓋的特點如下: 1.方法名和參數必須與父類方法相同; 2.返回值類型可以是父類方法返回值類型的子類; 3.子類方法的權限不能低于父類方法權限; 4.子類方法不能拋出父類方法未拋出的異常。
重載——Overload
重載的概念是定義一個與原方法名相同但參數列表不同的方法,它與覆蓋的不同之處在于其在同一類中的其他方法名是相同的,不同的僅僅是參數列表的不同。 重載的特點如下: 1.方法名稱必須相同; 2.方法的參數類型、參數數量或者參數順序必須不同; 3.與返回值類型無關; 4.可以拋出與原方法異常不同的異常。
結論
通過對兩者概念和特點的分析,可以得出結論: 1. 覆蓋是指在子類中重寫與父類同名同參數的方法,其方法體的實現不同,返回值類型也可能不同; 2. 重載是在同一類內定義了多個方法,它們的方法名相同,但是參數列表不同,區分方式常用的是參數類型和個數; 3. 覆蓋實現的是運行時多態,即在運行時根據對象的類型來確定執行哪個方法; 4. 重載實現的是編譯時多態,即在編譯時根據參數類型和個數來確定執行哪個方法。