Java 方法重載和多態

來源:互聯網
上載者:User

標籤:注釋   方式   父類   功能   extends   long   整數   公眾號   void   

先來看看什麼是方法重載?

方法重載的要求是:方法名相同,參數列表不同(不同的參數類型或者參數順序或者參數個數)。至於方法的其他部分,如方法傳回值類型和修飾符,與方法重載沒有任何關係。最好加上@Overload註解。

為什麼要用方法重載?

重載的目的是方便程式員調用方法。比如,System.out.println()這個函數是用來輸出的,當輸出的是整數時是用這個方法,當輸出一個字串時還是用這個方法。根據傳入參數的不同,自動找到匹配的方法。

以下程式不使用方法重載,試著分析看看有什麼缺點。

 

public class methodtest07{
 public static void main(String[] args){
  //缺點:對於程式員來說,需要記憶三個不同的方法
System.out.println(Compute.sumint(128,42));
System.out.println(Compute.sumdouble(121.23,242.432));
System.out.println(Compute.sumlong(234L,3242L));
}
 }
class Compute{
public static int sumint(int a,int b){
return a+b;
}
public static double sumdouble(double a,double b){
return a+b;
}
public static long sumlong(long a,long b){
return a+b;
}
}

 

上述代碼的缺陷就是程式員得記住三個不同的方法。(頭大)

結合代碼來看看哪些情況屬於方法重載?代碼後面有詳細的注釋。

 

//以下方法構成方法重載
public static void m1(int a){}
public static void m1(double a){}

public static void m2(int a,int b){}
public static void m2(int a){}

public static void m3(int a,double b){}
public static void m3(double a,int b){}

//以下m4方法不構成方法重載
public static void m4(int a){}
public static void m4(int b){}  //方法重複,編譯無法通過

//m5方法不構成方法重載   方法的重載和方法的傳回值類型無關
public static void m5(){}
public static int m5(){
 return 100;
 }
//m6不構成方法的重載  方法的重載和方法的修飾符列表無關
static void m6(){}
public static void m6(){}
 }

 

總結一下,方法的重載:

1.發生在同一個類中

2.方法名相同

3.參數列表不同(參數的類型,個數,順序不同)

4.和傳回值類型無關

5.和方法的修飾符列表無關

 

什麼是多態?

多態是指允許不同類的對象對同一訊息做出響應。即同一訊息可以根據發送對象的不同而採用多種不同的行為方式(發送訊息就是函數調用)。繼承在為多態的實現做了準備。子類繼承父類,我們可以編寫一個指向子類的父類類型引用,該引用既可以處理父類對象,也可以處理子類對象,當相同的訊息發送給子類或者父類對象時,該對象就會根據自己所屬的引用而執行不同的行為,這就是多態。即多態性就是相同的訊息使得不同的類做出不同的響應。

Java實現多態有三個必要條件:繼承,重寫,向上轉型。

繼承:在多態中必須存在有繼承關係的子類和父類。

重寫:子類對父類中某些方法進行重新定義,在調用這些方法時就會調用子類的方法。

向上轉型:在多態中需要將子類的引用賦給父類對象,只有這樣該引用才能夠具備技能調用父類的方法和子類的方法。

只有滿足了上述三個條件,我們才能夠在同一個繼承結構中使用同一的邏輯實現代碼處理不同的對象,從而達到執行不同的行為。下面結合代碼理解。

 

public class Quadrangle {
 // 執行個體化儲存四邊形對象的數組對象
 private Quadrangle[] qtest = new Quadrangle[6];
 private int nextIndex = 0;
 public void draw(Quadrangle q) { // 定義draw()方法,參數為四邊形對象
   if (nextIndex < qtest.length) {
     qtest[nextIndex] = q;
     System.out.println(nextIndex);
     nextIndex++;
   }
 public static void main(String[] args) {
   // 執行個體化兩個四邊形對象,用於調用draw()方法
   Quadrangle q = new Quadrangle();
   q.draw(new Square()); // 以正方形對象為參數調用draw()方法
   // 以平行四邊形對象為參數調用draw()方法
   q.draw(new Parallelogramgle());
 }
}
class Square extends Quadrangle { // 定義一個正方形類,繼承四邊形類
 public Square() {
   System.out.println("正方形");
 }
}

// 定義一個平行四邊形類,繼承四邊形類
class Parallelogramgle extends Quadrangle {
 public Parallelogramgle() {
   System.out.println("平行四邊形");
 }
}

 

輸出:

 

正方形
0
平行四邊形
1

 

從本執行個體啟動並執行結果可以看出,以不同類對象為參數調用draw()方法可以處理不同的映像類問題,程式員無須在所有的子類中定義執行相同功能的方法,只要執行個體化一個繼承父類的子類對象即可調用相應的方法,只要維護父類中的這個方法即可。

搜尋公眾號“程式員考拉”,歡迎關注!

Java 方法重載和多態

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.