Java 重寫和過載區別——物件導向的多型性分析
前言
我們知道物件導向主要是封裝、繼承和多型,重寫和過載都有物件導向的多型性,而一字相同,區別大不同。重寫是子類繼承父類中方法,屬於動態多型性。過載發生在同一個類中方法名相同引數個數或型別不同,且與返回值無關,屬於靜態多型性。呼叫被過載過的方法可以大大減少程式碼的輸入量,根據傳遞不同的引數就可以決定不同的功能或返回值。重寫和過載會讓我們在實際開發中程式碼結構更加清晰簡潔。
一、特性區別
過載(Overloading)
(1) 過載是讓類以統一的方式處理不同型別資料的一種手段。多個同名函式同時存在,具有不同的引數個數/型別。
(2) 呼叫方法時通過傳遞給它們的不同引數個數和引數型別來決定具體使用哪個方法,這是多型性表現形勢。
(3) 過載的時候,返回值型別可以相同也可以不相同。無法以返回型別作為過載函式的區分標準。
總結:簡單說,就是同樣的一個方法能夠根據輸入資料的不同,做出不同的處理,即方法的過載——有不同的引數列表(靜態多型性)。
重寫(Overriding)
(1)父類與子類之間的多型性,對父類的函式進行重新定義。若子類並不想原封不動地繼承父類的方法,就需要重寫,又稱方法覆蓋。
(2)若子類中存在與父類中的方法具有相同的方法名、返回型別和引數時,方法將覆蓋原方法即重寫。如果需要父類原方法,可使用super關鍵字。
(3)子類函式的訪問修飾許可權不能少或小於父類的許可權。
總結: 當子類繼承自父類的相同方法,輸入資料一樣,但要做出有別於父類的響應時,你就要覆蓋父類方法, 即在子類中重寫該方法,是一種相同引數,不同實現的特性。(動態多型性)
二、使用規則區別
過載(Overloading)
1、必須具有不同的引數列表;
2、可以有不責罵的返回型別,只要引數列表不同就可以了;
3、可以有不同的訪問修飾符;
4、可以丟擲不同的異常;
重寫(Overriding)
1、引數列表必須完全與被重寫的方法相同,否則不能稱其為重寫而是過載。
2、返回的型別必須一直與被重寫的方法的返回型別相同,否則不能稱其為重寫而是過載。
3、訪問修飾符的限制一定要大於被重寫方法的訪問修飾符(public>protected>default>private)
4、重寫方法一定不能丟擲新的檢查異常或者比被重寫方法申明更加寬泛的檢查型異常。例如:
父類的一個方法申明瞭一個檢查異常IOException,在重寫這個方法是就不能丟擲Exception,只能丟擲IOException的子類異常,可以丟擲非檢查異常。
相關文章
- 物件導向重寫(override)與過載(overload)區別物件IDE
- 重寫、覆蓋、過載、多型幾個概念的區別分析多型
- 物件導向和麵向過程的區別物件
- Java物件導向--多型Java物件多型
- 過載和重寫的區別
- Java—重寫與過載的區別Java
- 心得 : 物件導向和麵向過程的區別【分享】物件
- java中過載與重寫的區別Java
- Java物件導向總結(多型)Java物件多型
- 解釋下什麼是物件導向?物件導向和麵向過程的區別?物件
- 物件導向和麵向過程程式設計的區別?物件程式設計
- 物件導向-多型物件多型
- 物件導向--內部屬性型別物件型別
- 面試官:Java的重寫和過載有什麼區別?面試Java
- Java007-物件導向(多型)Java物件多型
- java-物件導向程式設計--多型Java物件程式設計多型
- 過載(Overload)和重寫(Override)的區別。過載的方法能否根據返回型別進行區分IDE型別
- 【JAVA】重寫和過載Java
- 物件導向基礎(1)--繼承 多型 重構物件繼承多型
- 關於物件導向和麵向過程本質的區別(個人感悟)物件
- JAVA物件導向之多型Java物件多型
- JAVA高階物件導向二:認識多型 多型的好處Java物件多型
- 物件導向:封裝,多型物件封裝多型
- Java中的過載和重寫Java
- JavaSE —— 第11步 —— 最關鍵的一點(物件導向) 11.1物件導向和麵向過程的區別Java物件
- JS物件導向Object型別JS物件Object型別
- 《JavaScript物件導向精要》之一:基本型別和引用型別JavaScript物件型別
- JAVA物件導向基礎--封裝 繼承 多型Java物件封裝繼承多型
- C++中過載、重寫、重定義的區別C++
- 物件導向和麵向過程物件
- 【Java】瘋狂Java基礎(一)——物件導向的特徵:繼承、封裝和多型Java物件特徵繼承封裝多型
- [JAVA] Java物件導向三大特徵:封裝、繼承、多型Java物件特徵封裝繼承多型
- [譯] part 28: golang 的物件導向 -- 多型Golang物件多型
- C++和java多型的區別C++Java多型
- 理解C++物件導向程式設計[多型性部分] (轉)C++物件程式設計多型
- 類成員函式的重寫,過載和隱藏的區別函式
- 簡單談談方法過載和方法重寫(編譯時多型和執行時多型)編譯多型
- Java:Java的物件導向Java物件