
更多精彩,請關注我的微網誌:https://blog.csdn.net/weixin_44259720
方法的重寫(Overriding)和重載(Overloading)是java多态性的不同表現,其中:
- 重寫是父類與子類之間多态性的一種表現;
- 重載可以了解成多态的具體表現形式;
重寫(Override)
重寫存在于父類和子類之間,是子類對父類的允許通路的方法的實作過程進行重新編寫,方法名、參數清單、傳回值不能改變,隻改變内容。即外殼不變,核心重寫!
重寫的好處在于子類可以根據需要,定義特定于自己的行為。 也就是說子類能夠根據需要實作父類的方法。
重寫方法不能抛出新的檢查異常或者比被重寫方法申明更加寬泛的異常。
例如: 父類的一個方法申明了一個檢查異常 IOException,但是在重寫這個方法的時候不能抛出 Exception 異常,因為 Exception 是 IOException 的父類,隻能抛出 IOException 的子類異常。
重載(Overload)
重載(overloading) 是在一個類裡面,方法名字相同,而參數不同,傳回類型可以相同也可以不同。
每個重載的方法(或者構造函數)都必須有一個獨一無二的參數類型清單,即:參數類型、個數、順序至少有一個不相同。
方法能夠在同一個類中或者在一個子類中被重載,并且不能以傳回值類型作為重載函數的區分标準。
差別
一張圖概括一下:
總結
- 方法重載是一個類中定義了多個方法名相同,而他們的參數的數量不同或數量相同而類型和次序不同,則稱為方法的重載(Overloading);
- 方法重寫是在子類存在方法與父類的方法的名字相同,而且參數的個數與類型一樣,傳回值也一樣的方法,就稱為重寫(Overriding);
- 重寫時,雖然子類方法不能抛出比父類方法更多的異常,但子類方法可以不抛出異常;
- 方法被定義為final不能被重寫;
- 重載最常用的地方就是構造器的重載!!