Overload 和 和 Override 的區別
Overload 是過載的意思,Override 是覆蓋的意思,也就是重寫。
過載 Overload 表示同一個類中可以有多個名稱相同的方法,但這些方法的引數列表各不相同(即引數個數或型別不同)。
重寫 Override 表示子類中的方法可以與父類中的某個方法的名稱和引數完全相同,通過子類建立的例項物件呼叫這個方法時,將呼叫子類中的定義方法,這相當於把父類中定義的那個完全相同的方法給覆蓋了,這也是物件導向程式設計的多型性的一種表現。子類覆蓋父類的方法時,只能比父類丟擲更少的異常,或者是丟擲父類丟擲的異常的子異常,因為子類可以解決父類的一些問題,不能比父類有更多的問題。子類方法的訪問許可權只能比父類的更大,不能更小。如果父類的方法是 private 型別,那麼,子類則不存在覆蓋的限制,相當於子類中增加了一個全新的方法。
至於 Overloaded 的方法是否可以改變返回值的型別這個問題,要看你倒底想問什麼呢?這個題目很模糊。如果幾個 Overloaded 的方法的引數列表不一樣,它們的返回者型別當然也可以不一樣。但我估計你想問的問題是:如果兩個方法的引數列表完全一樣,是否可以讓它們的返回值不同來實現過載 Overload。這是不行的,我們可以用反證法來說明這個問題,因為我們有時候呼叫一個方法時也可以不定義返回結果變數,即不要關心其返回結果,例如,我們呼叫 map.remove(key)方法時,雖然 remove 方法有返回值,但是我們通常都不會定義接收返回結果的變數,這時候假設該類中有兩個名稱和引數列表完全相同的方法,僅僅是返回型別不同,java 就無法確定程式設計者倒底是想呼叫哪個方法了,因為它無法通過返回結果型別來判斷。
override 可以翻譯為覆蓋,從字面就可以知道,它是覆蓋了一個方法並且對其重寫,以求達到不同的作用。對我們來說最熟悉的覆蓋就是對介面方法的實現,在介面中一般只是對方法進行了宣告,而我們在實現時,就需要實現介面宣告的所有方法。除了這個典型的用法以外,我們在繼承中也可能會在子類覆蓋父類中的方法。在覆蓋要注意以下的幾點:
1、覆蓋的方法的標誌必須要和被覆蓋的方法的標誌完全匹配,才能達到覆蓋的效果;
2、覆蓋的方法的返回值必須和被覆蓋的方法的返回一致;
3、覆蓋的方法所丟擲的異常必須和被覆蓋方法的所丟擲的異常一致,或者是其子類;
4、被覆蓋的方法不能為 private,否則在其子類中只是新定義了一個方法,並沒有對其進行
覆蓋。
overload 對我們來說可能比較熟悉,可以翻譯為過載,它是指我們可以定義一些名稱相同的方法,通過定義不同的 輸入引數來區分這些方法,然後再呼叫時,VM 就會根據不同的引數樣式,來選擇合適的方法執行。在使用過載要注意以下的幾點:
1、在使用過載時只能通過不同的引數樣式。例如,不同的引數型別,不同的引數個數,不同的引數順序(當然,同一方法內的幾個引數型別必須不一樣,例如可以是 fun(int,float),但是不能為 fun(int,int));
2、不能通過訪問許可權、返回型別、丟擲的異常進行過載;
3、方法的異常型別和數目不會對過載造成影響;
4、對於繼承來說,如果某一方法在父類中是訪問許可權是 priavte,那麼就不能
在子類對其進行過載,如果定義的話,也只是定義了一個新方法,而不會達到重
載的效果。
相關文章
- override 與overload 的區別IDE
- override與overload的區別IDE
- override 與 overload 的區別+例子IDE
- override與過載(overload)的區別IDE
- 19、Overload和Override的區別。Overloaded的方法是否可以改變返回值的型別?IDE型別
- 過載(Overload)和重寫(Override)的區別。過載的方法能否根據返回型別進行區分IDE型別
- 物件導向重寫(override)與過載(overload)區別物件IDE
- Java 中的 override 和 overload,看這一篇就夠JavaIDE
- override(重寫) and overload(過載)IDE
- JAVA過載(overload)和覆蓋(override)中你所不知道的陷阱JavaIDE
- Java 重寫(Override)與過載(Overload)JavaIDE
- Java-override重寫與overload過載JavaIDE
- ../和./和/的區別
- 和 的區別
- as 和 with的區別
- ||和??的區別
- /*和/**的區別
- LinkedList和ArrayList的區別、Vector和ArrayList的區別
- http和https的區別/get和post的區別HTTP
- ./ 和sh 的區別
- JQuery this和$(this)的區別jQuery
- jquery $(this) 和this的區別jQuery
- T和?的區別
- ++a和a++的區別
- makefile =和:=的區別
- 和區別
- 堆和棧的概念和區別
- Mybatis中#{}和${}傳參的區別及#和$的區別小結MyBatis
- 堆和棧的解釋和區別
- COM和DLL和activex 的區別
- MYSQL和SQL的區別MySql
- varchar和char的區別
- &self 和 self 的區別
- var和public的區別
- filter和interceptor的區別Filter
- useEffect 和 useLayoutEffect 的區別
- SDK和API的區別?API
- var 和 let 的區別