你知道方法重寫與方法重載的區別嗎

一、方法重寫(0veriding)
百度解釋: 在Java和其他一些高級面向對象的編程語言中,子類可繼承父類中的方法,而不需要重新編寫相同的方法。但有時子類並不想原封不動地繼承父類的方法,而是想作一定的修改,這就需要採用方法的重寫。方法重寫又稱方法覆蓋。

重寫體現了Java優越性,重寫是建立在繼承關係上,它使語言結構更加豐富。子類中的方法與父類中繼承的方法有完全相同的返回值類型、方法名、參數個數以及參數類型。

此時調用重寫的方法,肯定是調用被重寫過的方法,那麼如果現在一定要調用父類中的方法該怎麼辦呢?

通過使用super關鍵就可以實現這個功能,即“super.方法名(參數列表)”。

重寫規則
在重寫方法時,需要遵循以下的規則:
(一) 父類方法的參數列表必須完全與被子類重寫的方法的參數列表相同,否則不能稱其爲重寫而是重載。
(二) 父類的返回類型必須與被子類重寫的方法返回類型相同,否則不能稱其爲重寫而是重載。…
(三) Java中規定,被子類重寫的方法不能擁有比父類方法更加嚴格的訪問權限。編寫過Java程序的人就知道,

父類中的方法並不是在任何情況下都可以重寫的,當父類中方法的訪問權限修飾符爲private時,該方法只能被自己的類訪問,

不能被外部的類訪問,在子類是不能被重寫的。如果定義父類的方法爲public,在子類定義爲private,程序運行時就會報錯。

(四) 由於父類的訪問權限修飾符的限制一定要大於被子類重寫方法的訪問權限修飾符,而private權限最小。

所以如果某一個方法在父類中的訪問權限是private,那麼就不能在子類中對其進行重寫。如果重新定義,也只是定義了一個新的方法,不會達到重寫的效果。
(五) 在繼承過程中如果父類當中的方法拋出異常,那麼在子類中重寫父類的該方法時,也要拋出異常,

而且拋出的異常不能多於父類中拋出的異常(可以等於父類中拋出的異常)。換句話說,重寫方法一定不能拋出新的檢查異常,

或者比被重寫方法聲明更加寬泛的檢查型異常。例如,父類的一個方法申明瞭一個檢查異常IOException,在重寫這個方法時就不能拋出Exception,

只能拋出IOException的子類異常,可以拋出非檢查異常。同樣的道理,如果子類中創建了一個成員變量,

而該變量和父類中的一個變量名稱相同,稱作變量重寫或屬性覆蓋。但是此概念一般很少有人去研究它,因爲意義不大。

二、方法重載(Overloading)
百度解釋: 方法重載是指在一個類中定義多個同名的方法,但要求每個方法具有不同的參數的類型或參數的個數。調用重載方法時,Java編譯器能通過檢查調用的方法的參數類型和個數選擇一個恰當的方法。

即在一個類中,多個方法的方法名相同,但是參數列表不同。參數列表不同指的是參數個數、參數類型或者參數的順序不同。

方法重載是讓類以統一的方式處理不同類型數據的一種手段。 我們調用方法時通過傳遞的參數不同來決定使用的是哪個方法,這就是多態性

重載規則
1.在使用重載時只能通過不同的參數列表,必須具有不同的參數列表。

2.不能通過訪問權限、返回類型、拋出的異常進行重載。
3.方法的異常類型和數目不會對重載造成影響。
4.可以有不同的返回類型,只要參數列表不同就可以了。
5.可以有不同的訪問修飾符。

6.可以拋出不同的異常。

方法重寫與方法重載的區別:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章