方法重載和方法重寫--java 封裝、繼承、多態--java

0. 什麼是方法?html

  方法是指java類中定義的一段代碼體,實際上與c語言中的函數並沒有不一樣。方法的基本組成部分包括返回值、方法名稱、參數和方法體,下面是一個方法最基本的形式:java

1 返回值類型 方法名稱(參數列表){
2   方法體
3 }

 

1.方法重載(overloading)函數

  方法重載是指在同一個類中,兩個或兩個以上方法的方法名稱相同但它們的參數(包括參數類型、參數個數和參數順序)不一樣。這樣,在調用該方法時,根據傳入的參數不一樣,執行的具體邏輯不一樣。post

  下面的代碼是方法重載的幾種例子:測試

void A(){邏輯1;}
void A(int i){邏輯2;}//與邏輯1相比,參數個數不一樣
void A(String s){邏輯3;}//與邏輯2相比,參數類型不一樣
void A(int i,String s){邏輯4;}//
void A(String s,int i){邏輯5;}//與邏輯4相比,參數順序不一樣
int A(String s,String str){邏輯6;}//方法重載時,返回值類型能夠變化,可是參數必須跟其餘方法不一樣,不然編譯報錯

#錯誤示範:下行代碼與第1行衝突,編譯會報錯
//int A(){邏輯6}

  注意點:url

  (1)一個方法能夠被重載無數次;spa

  (2)構成重載的各個方法之間惟一要求的不一樣就是參數必須不一樣,返回值類型、訪問修飾符、拋出異常等其餘因素能夠相同,也能夠不一樣;code

  (3)在繼承時,子類也能夠重載基類的方法。htm

 

2.方法重寫(overriding)對象

  方法重寫,又被稱爲方法覆蓋。重寫是指子類方法與父類方法的返回值類型、方法名稱和參數(參數個數、參數順序和參數類型)徹底一致。當調用一個聲明爲基類類型的子類對象的重寫方法時,java虛擬機可以根據該對象的實際類型執行指定的重寫版本(eg.當某個基類擁有多個子類而且某個基類方法被多個基類重寫時)。

  重寫實例:在下面的代碼中,在同一目錄下建立了三個java文件:Base.java,Sub.java和Test.java。其中,Base.java中建立了Base類,Base類中只有一個方法A;Sub.java經過繼承Base類建立了Sub類,並在Sub類中重寫了Base類的A方法;最後,在Test.java中的main方法中建立了一個Sub對象eg,而且eg被聲明爲Base類型。調用對象eg的A方法,經過輸出結果,能夠看出java虛擬機在運行第15行代碼時執行的是Sub類中的A方法,而不是Base類中的A方法。

  值得注意的是,在編譯下面的代碼第15行時java編譯器並不知道eg的確切類型,所以一般會指望它的編譯結果是調用基類(即Base類)的A方法,而在運行時java虛擬機提供的多態機制會保證調用的是Sub類的A方法(如需瞭解多態,請閱讀封裝、繼承、多態--java第3部分)。

 1 //Base.java:基類
 2 public class Base{  
 3   public void A(){System.out.println("This is Base Class.");)} 4 } 5 6 //Sub.java:子類 7 public class Sub extends Base{ 8 public void A(){System.out.println("This is Sub Class.");} 9 } 10 11 //Test.java:多態測試 12 public class Test{ 13 public static void main(String[] args){ 14 Base eg = new Sub(); 15  eg.A(); 16  } 17 }

//輸出結果
This is Sub Class.

3.總結

  3.1 兩者與多態的關係

  重載與多態無關,重寫方法的正確運行須要多態機制的支持

  3.2 兩者區別

  重載和重寫的最大區別在於重載是針對一個方法、不一樣參數的多個版本,而重寫是針對一個方法、相同參數、相同返回值類型可是不一樣類型(多個子類和基類中)的多個版本。換句話說,重寫後的方法與重寫前的方法除了所處的java類不一樣外其餘(返回值類型、拋出異常、參數、方法名稱等)均相同,而重載的方法之間惟一的強制要求就是方法名相同且參數不一樣,其餘(返回值類型、拋出異常、參數、方法名稱等)能夠相同,也能夠不一樣。

相關文章
相關標籤/搜索