1. 程式人生 > >JAVA方法過載和重寫的特徵

JAVA方法過載和重寫的特徵

方法的過載:

方法過載是讓類以統一的方式處理不同型別資料的一種手段。

多個同名函式同時存在,具有不同的引數個數/型別。

方法名相同,方法引數的個數或型別不同,通過個數和型別的不同來區分不同的函式;

方法的過載跟返回值型別和修飾符無關

Java的過載是發生在本類中的

過載的條件是在本類中有多個方法名相同但引數列表不同(可能是,引數個數不同引數型別不同)跟返回值無關;

方法重寫:

在Java程式中,類的繼承關係可以產生一個子類,子類繼承父類,它具備了父類所有的特徵,繼承了父類所有的方法和變數。

子類可以定義新的特徵,當子類需要修改父類的一些方法進行擴充套件,增大功能,程式設計者常常把這樣的一種操作方法稱為重寫,也叫稱為覆寫或覆蓋。

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

在Java中覆蓋繼承父類的方法就是通過方法的重寫來實現的。所謂方法的重寫是指子類中的方法與父類中繼承的方法有完全相同的返回值型別、方法名、引數個數以及引數型別。

這樣,就可以實現對父類方法的覆蓋。如果子類將父類中的方法重寫了,呼叫的時候肯定是呼叫被重寫過的方法,那麼如果現在一定要呼叫父類中的方法該怎麼辦呢?

此時,通過使用super關鍵就可以實現這個功能,super關鍵字可以從子類訪問父類中的內容,如果要訪問被重寫過的方法,使用“super.方法名(引數列表)”的形式呼叫。

如果要使用super關鍵字不一定非要在方法重寫之後使用,也可以明確地表示某個方法是從父類中繼承而來的。使用super只是更加明確的說,要從父類中查詢,就不在子類查找了。

重寫方法的規則

1)、引數列表必須完全與被重寫的方法相同,否則不能稱其為重寫而是過載。

2)、返回的型別必須一直與被重寫的方法的返回型別相同,否則不能稱其為重寫而是過載。

3)、訪問修飾符的限制一定要大於被重寫方法的訪問修飾符(public>protected>default>private)

4)、重寫方法一定不能丟擲新的檢查異常或者比被重寫方法申明更加寬泛的檢查型異常。例如:

父類的一個方法申明瞭一個檢查異常IOException,在重寫這個方法是就不能丟擲Exception,只能丟擲IOException的子類異常,可以丟擲非檢查異常。

過載的規則:

1)、必須具有不同的引數列表;

2)、可以有不同的返回型別,只要引數列表不同就可以了;

3)、可以有不同的訪問修飾符;

4)、可以丟擲不同的異常;

過載和重寫(覆蓋)的特點:

1. Override 特點

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

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

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

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

2.Overload 特點

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

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

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

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

總結:

override(重寫)

   1、方法名、引數、返回值相同。

   2、子類方法不能縮小父類方法的訪問許可權。

   3、子類方法不能丟擲比父類方法更多的異常(但子類方法可以不丟擲異常)。

   4、存在於父類和子類之間。

   5、方法被定義為final不能被重寫。

 overload(過載)

  1、引數型別、個數、順序至少有一個不相同。 

  2、不能過載只有返回值不同的方法名。

  3、存在於父類和子類、同類中。