1. 程式人生 > >Overload、Override的理解

Overload、Override的理解

一、OverloadOverride的區別

        Overload是過載的意思;

        Override是覆蓋的意思,也就是重寫。

過載Overload:表示同一個類中可以有多個名稱相同的方法,但這些方法的引數列表各不相同(即引數個數型別不同)。

重寫Override:表示子類中的方法可以與父類中的某個方法的名稱引數完全相同,也就是說子類重新定義了父類的方法這也是面向物件程式設計的多型性的一種表現

二、Overloaded的方法是否可以改變返回值的型別?

   如果幾個Overloaded的方法的引數列表不一樣,它們的返回者型別當然也可以不一樣。(如果兩個方法的引數列表完全一樣,是否可以讓它們的返回值不同來實現過載

Overload。這是不行的,我們可以用反證法來說明這個問題,因為我們有時候呼叫一個方法時也可以不定義返回結果變數,即不要關心其返回結果,假設該類中有兩個名稱和引數列表完全相同的方法,僅僅是返回型別不同,Java就無法確定程式設計者倒底是想呼叫哪個方法了,因為它無法通過返回結果型別來判斷。)

三、關於Overload
   過載,它是指我們可以定義一些名稱相同的方法,通過定義不同的輸入引數來區分這些方法,然後再呼叫時,VM就會根據不同的引數樣式,來選擇合適的方法執行。在使用過載要注意以下的幾點:

1、在使用過載時只能通過不同的引數樣式。例如,不同的引數型別,不同的引數個數,不同的引數順序(當然,同一方法內的幾個引數型別必須不一樣,例如可以是

fun(int,float),但是不能為fun(int,int));

2、不能通過訪問許可權、返回型別、丟擲的異常進行過載;

3、方法的異常型別和數目不會對過載造成影響;

4、對於繼承來說,如果某一方法在父類中是訪問許可權是priavte,那麼就不能在子類對其進行過載,如果定義的話,也只是定義了一個新方法,而不會達到過載的效果。

四、關於Override

        覆蓋,從字面就可以知道,它是覆蓋了一個方法並且對其重寫,以求達到不同的作用。對我們來說最熟悉的覆蓋就是對介面方法的實現,在介面中一般只是對方法進行了宣告,而我們在實現時,就需要實現介面宣告的所有方法。除了這個典型的用法以外,我們在繼承中也可能會在子類覆蓋父類中的方

法。在覆蓋要注意以下的幾點:

1、覆蓋的方法的標誌必須要和被覆蓋的方法的標誌完全匹配,才能達到覆蓋的效果;

2、覆蓋的方法的返回值必須和被覆蓋的方法的返回一致;

3、覆蓋的方法所丟擲的異常必須和被覆蓋方法的所丟擲的異常一致,或者是其子類;

4、被覆蓋的方法不能為private,否則在其子類中只是新定義了一個方法,並沒有對其進行覆蓋。