Java中Overload和Override的區別


由於項目正式收工,閑來無事突然發現以前的文檔上有一個問題介紹的不是很詳細

 

override(重寫,覆蓋)

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

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

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

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

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

 

overload(重載,過載)

1、參數類型、個數、順序至少有一個不相同。 

​ 2、不能重載只有返回值不同的方法名。3、存在於父類和子類、同類中。

 

方法的重寫(Overriding)和重載(Overloading)是Java多態性的不同表現。

重寫(Overriding)是父類與子類之間多態性的一種表現,而重載(Overloading)是一個類中多態性的一種表現。如果在子類中定義某方法與其父類有相同的名稱和參數,我們說該方法被重寫 (Overriding)。子類的對象使用這個方法時,將調用子類中的定義,對它而言,父類中的定義如同被"屏蔽"了.

 

如果在一個類中定義了多個同名的方法,它們或有不同的參數個數或有不同的參數類型或有不同的參數次序,則稱為方法的重載(Overloading)。不能通過訪問權限、返回類型、拋出的異常進行重載.

 

1. Override 特點

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

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

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

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

 

2.Overload 特點

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

 2、不能通過訪問權限、返回類型、拋出的異常進行重載;

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

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

 

重載可以改變返回值類型,但是如果只是返回值類型不一樣是算不上重載的。重載的判斷條件還是根據參數來,只不過是說重載的函數可以返回值不一樣,就是說重載可以決定返回值類型,但是返回值類型不能決定重載。

 

Overloaded的方法是可以改變返回值的類型。這句話是正確的,唯一區分方法重載的是方法的參數列表不同,當參數列表不同時就可改變其返回類型

package alltest;

​public class OverLoadTest {

​public void m1(int x){}

​public int m1(int x,int y){ return 12;}

​// public String m1(int x){return "12";} 
//error!Duplicate method m1(int)
//in type OverLoadTest 
public String m1(int x,int y,int z){return "abc";}

​public int m1(String x,int y){return 12;};

}

當參數列表不同時,能達到區分重載時,就可以改變方法的返回類型​。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM