重載(Overloading)
#(推薦學習:java入門程式)
方法重載是讓類別以統一的方式處理不同類型資料的手段。多個同名函數同時存在,具有不同的參數數量/型別。重載Overloading是一個類別中多態性的一種表現。
Java的方法重載,就是在類別中可以創建多個方法,它們具有相同的名字,但具有不同的參數和不同的定義。
在呼叫方法時透過傳遞給它們的不同參數個數和參數類型來決定具體使用哪個方法, 這就是多態性。
重載的時候,方法名稱要一樣,但是參數型別和個數不一樣,回傳值型別可以相同也可以不相同。無法以返回值類型作為重載函數的區分標準。
父類別方法被預設修飾時,只能在同一包中,被其子類別重寫,如果不在同一包則不能重寫。
父類別的方法被protoeted時,不僅在同一套件中,被其子類別重寫,還可以不同套件的子類別重寫。
重載的規則
必須有不同的參數清單;
可以有不同的回傳類型,只要參數清單不同就可以了;
可以有不同的存取修飾符;
可以拋出不同的例外;
重寫方法的規則
#參數清單必須完全與重寫的方法相同,否則不能稱其為重寫而是重載。
傳回的類型必須一直與被重寫的方法的回傳型別相同,否則不能稱其為重寫而是重載。
存取修飾符的限制一定大於被重寫方法的存取修飾符(public>protected>default>private)
#重寫入方法一定不能拋出新的檢查異常或比被重寫方法申明更加寬泛的檢查型異常。例如:父類別的一個方法申明了一個檢查異常IOException,在重寫這個方法是就不能拋出Exception,只能拋出IOException的子類異常,可以拋出非檢查異常。
重載與重寫(覆蓋)的特點
(影片教學推薦:java影片教學)
Overload 特點
1、在使用重載時只能透過不同的參數樣式。例如,不同的參數類型,不同的參數個數,不同的參數順序(當然,同一方法內的幾個參數類型必須不一樣,例如可以是fun(int, float), 但是不能為fun(int, int ));
2、不能透過存取權限、傳回型別、拋出的例外進行重載;
3、方法的例外類型和數目不會對重載造成影響;
4、對於繼承來說,如果某一方法在父類別中是存取權限是priavte,那麼就不能在子類別中重載,如果定義的話,也只是定義了一個新方法,而不會達到重載的效果。
Override 特點
1、覆寫的方法的標誌必須要和被覆寫的方法的標誌完全匹配,才能達到覆蓋的效果;
2、覆寫的方法的回傳值必須和被覆寫的方法的回傳一致;
3、覆寫的方法所拋出的例外必須和被覆寫方法的所拋出的例外一致,或者是其子類別;
4、被覆寫的方法不能為private,否則在其子類別中只是新定義了一個方法,並沒有對其進行覆寫。
總結
overload(重載)
#參數型別、個數、順序至少有一個不相同。
不能重載只有回傳值不同的方法名稱。
存在於父類別和子類別、同類中。
override(重寫)
方法名稱、參數、傳回值相同。
子類別方法不能縮小父類別方法的存取權限。
子類別方法不能拋出比父類別方法更多的例外(但子類別方法可以不拋出例外)。
存在於父類別和子類別之間。
方法被定義為final不能被重寫。
以上是如何區別java中的重寫和重載概念的詳細內容。更多資訊請關注PHP中文網其他相關文章!