重寫、覆蓋、過載、多型幾個概念的區別分析
override->重寫(=覆蓋)、overload->過載、polymorphism -> 多型
override->重寫(=覆蓋)
override是重寫(覆蓋)了一個方法,以實現不同的功能。一般是用於子類在繼承父類時,重寫(重新實現)父類中的方法。
重寫(覆蓋)的規則:
1、重寫方法的引數列表必須完全與被重寫的方法的相同,否則不能稱其為重寫而是過載.
2、重寫方法的訪問修飾符一定要大於被重寫方法的訪問修飾符(public>protected>default>private)。
3、重寫的方法的返回值必須和被重寫的方法的返回一致;
4、重寫的方法所丟擲的異常必須和被重寫方法的所丟擲的異常一致,或者是其子類;
5、被重寫的方法不能為private,否則在其子類中只是新定義了一個方法,並沒有對其進行重寫。
重寫(覆蓋)的規則:
1、重寫方法的引數列表必須完全與被重寫的方法的相同,否則不能稱其為重寫而是過載.
2、重寫方法的訪問修飾符一定要大於被重寫方法的訪問修飾符(public>protected>default>private)。
3、重寫的方法的返回值必須和被重寫的方法的返回一致;
4、重寫的方法所丟擲的異常必須和被重寫方法的所丟擲的異常一致,或者是其子類;
5、被重寫的方法不能為private,否則在其子類中只是新定義了一個方法,並沒有對其進行重寫。
6、靜態方法不能被重寫為非靜態的方法(會編譯出錯)。
overload->過載
overload是過載,一般是用於在一個類內實現若干過載的方法,這些方法的名稱相同而引數形式不同。
過載的規則:
1、在使用過載時只能透過相同的方法名、不同的引數形式實現。不同的引數型別可以是不同的引數型別,不同的引數個數,不同的引數順序(引數型別必須不一樣);
2、不能透過訪問許可權、返回型別、丟擲的異常進行過載;
3、方法的異常型別和數目不會對過載造成影響;
過載的規則:
1、在使用過載時只能透過相同的方法名、不同的引數形式實現。不同的引數型別可以是不同的引數型別,不同的引數個數,不同的引數順序(引數型別必須不一樣);
2、不能透過訪問許可權、返回型別、丟擲的異常進行過載;
3、方法的異常型別和數目不會對過載造成影響;
polymorphism -> 多型
多型的概念比較複雜,有多種意義的多型,一個有趣但不嚴謹的說法是:繼承是子類使用父類的方法,而多型則是父類使用子類的方法。
一般,我們使用多型是為了避免在父類裡大量過載引起程式碼臃腫且難於維護。
一般,我們使用多型是為了避免在父類裡大量過載引起程式碼臃腫且難於維護。
舉個例子: public class Shape { public static void main(String[] args){ Triangle tri = new Triangle(); System.out.println("Triangle is a type of shape? " + tri.isShape());// 繼承 Shape shape = new Triangle(); System.out.println("My shape has " + shape.getSides() + " sides."); // 多型 Rectangle Rec = new Rectangle(); Shape shape2 = Rec; System.out.println("My shape has " + shape2.getSides(Rec) + " sides."); //過載 } public boolean isShape(){ return true; } public int getSides(){ return 0 ; } public int getSides(Triangle tri){ //過載 return 3 ; } public int getSides(Rectangle rec){ //過載 return 4 ; } }class Triangle extends Shape { public int getSides() { //重寫,實現多型 return 3; } } class Rectangle extends Shape { public int getSides(int i) { //過載 return i; } }
彙總
注意Triangle類的方法是重寫,而Rectangle類的方法是過載。對兩者比較,可以發現多型對過載的優點:
如果用過載,則在父類裡要對應每一個子類都過載一個取得邊數的方法;
如果用多型,則父類只提供取得邊數的介面,至於取得哪個形狀的邊數,怎樣取得,在子類裡各自實現(重寫)。
如果用過載,則在父類裡要對應每一個子類都過載一個取得邊數的方法;
如果用多型,則父類只提供取得邊數的介面,至於取得哪個形狀的邊數,怎樣取得,在子類裡各自實現(重寫)。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31559985/viewspace-2639338/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Java 重寫和過載區別——物件導向的多型性分析Java物件多型
- 過載和重寫的區別
- Java—重寫與過載的區別Java
- java中過載與重寫的區別Java
- C++中過載、重寫、重定義的區別C++
- 過載(Overload)和重寫(Override)的區別。過載的方法能否根據返回型別進行區分IDE型別
- 重複程式碼(克隆程式碼)的幾個概念與型別型別
- Java方法覆蓋和變數覆蓋的區別詳解Java變數
- Java中的過載和覆蓋的細微差別 - rajivprabJava
- 公司型別相關的幾個概念型別
- 幾個概念的區別,hdisk,hdiskpower,和lun
- 面試官:Java的重寫和過載有什麼區別?面試Java
- 類成員函式的重寫,過載和隱藏的區別函式
- 物件導向重寫(override)與過載(overload)區別物件IDE
- c++中的隱藏及過載、重寫與隱藏的區別C++
- C++之過載覆蓋和隱藏C++
- C++八股之函式過載與重寫-靜態多型與動態多型C++函式多型
- 簡單談談方法過載和方法重寫(編譯時多型和執行時多型)編譯多型
- 《Hack與HHVM權威指南》——1.5.2覆蓋方法的型別型別
- c#之多型性_繼承_重寫_虛擬函式_new覆蓋整合測試C#多型繼承函式
- AI回答記錄:python中有過載與重寫的概念嗎?AIPython
- maven 多模組專案的測試覆蓋率分析 - jacoco 聚合分析Maven
- 程式碼覆蓋率分析
- 菜鳥入門之淺談函式過載和多型的區別 (轉)函式多型
- 超市無線覆蓋的需求分析
- c#重寫和多型C#多型
- 重寫,隱藏,抽象,多型抽象多型
- 【JAVA】重寫和過載Java
- 多程式下的測試覆蓋率
- 方法重置和重寫的區別
- Java中的過載和重寫Java
- c#之重寫與過載的區別與聯絡_摘自.NEt專家部落格!C#
- 最小路徑可重複點覆蓋
- C#關鍵字之過載overload、重寫override、覆寫overwrite(new)詳解C#IDE
- 聊聊如何避免多個jar透過maven打包成一個jar,多個同名配置檔案發生覆蓋問題JARMaven
- 【c#】重寫和過載C#
- C++ 成員函式的過載,繼承,覆蓋和隱藏C++函式繼承
- 程式碼測試覆蓋率分析