方法重寫與方法重載的區別

1、方法重寫(0veriding)設計

在Java程序中,類的繼承關係能夠產生一個子類,子類繼承父類,它具有了父類全部的特徵,繼承了父類全部的方法和變量。繼承

子類能夠定義新的特徵,當子類須要修改父類的一些方法進行擴展,增大功能,程序設計者經常把這樣的一種操做方法稱爲重寫,也叫稱爲覆寫或覆蓋。虛擬機

重寫體現了Java優越性,重寫是創建在繼承關係上,它使語言結構更加豐富。在Java中的繼承中,子類既能夠隱藏和訪問父類的方法,也能夠覆蓋繼承父類的方法。io

在Java中覆蓋繼承父類的方法就是經過方法的重寫來實現的。所謂方法的重寫是指子類中的方法與父類中繼承的方法有徹底相同的返回值類型、方法名、參數個數以及參數類型。程序設計

這樣,就能夠實現對父類方法的覆蓋。若是子類將父類中的方法重寫了,調用的時候確定是調用被重寫過的方法,那麼若是如今必定要調用父類中的方法該怎麼辦呢?class

此時,經過使用super關鍵就能夠實現這個功能,super關鍵字能夠從子類訪問父類中的內容,若是要訪問被重寫過的方法,使用「super.方法名(參數列表)」的形式調用。變量

若是要使用super關鍵字不必定非要在方法重寫以後使用,也能夠明確地表示某個方法是從父類中繼承而來的。使用super只是更加明確的說,要從父類中查找,就不在子類查找了。擴展

 

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

父類中的方法並非在任何狀況下均可以重寫的,當父類中方法的訪問權限修飾符爲private時,該方法只能被本身的類訪問,程序

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

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

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

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

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

只能拋出IOException的子類異常,能夠拋出非檢查異常。一樣的道理,若是子類中建立了一個成員變量,

而該變量和父類中的一個變量名稱相同,稱做變量重寫或屬性覆蓋。可是此概念通常不多有人去研究它,由於意義不大。

 

3、方法重載(Overloading)

方法重載是讓類以統一的方式處理不一樣類型數據的一種手段。調用方法時經過傳遞給它們的不一樣個數和類型的參數來決定具體使用哪一個方法,這就是多態性。
所謂方法重載是指在一個類中,多個方法的方法名相同,可是參數列表不一樣。參數列表不一樣指的是參數個數、參數類型或者參數的順序不一樣。

方法的重載在實際應用中也會常常用到。不只是通常的方法,構造方法也能夠重載。

在方法重載時,方法之間須要存在必定的聯繫,由於這樣能夠提升程序的可讀性,通常只重載功能類似的方法。

重載是指咱們能夠定義一些名稱相同的方法,經過定義不一樣的參數來區分這些方法,而後再調用時,Java虛擬機就會根據不一樣的參數列表來選擇合適的方法執行

。也就是說,當一個重載方法被調用時,Java用參數的類型或個數來決定實際調用的重載方法。所以,每一個重載方法的參數的類型或個數必須是不一樣。

雖然每一個重載方法能夠有不一樣的返回類型,但返回類型並不足以區分所使用的是哪一個方法。

當Java調用一個重載方法是,參數與調用參數匹配的方法被執行。在使用重載要注意如下的幾點:
1.在使用重載時只能經過不一樣的參數列表,必須具備不一樣的參數列表。

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

6.能夠拋出不一樣的異常。

 

4、方法重寫與方法重載的區別

相關文章
相關標籤/搜索