Java方法過載


在同一類中具有多個具有相同名稱的方法稱為方法過載。類中具有相同名稱的方法可以是宣告的方法,繼承的方法或兩者的組合。
過載方法必須具有不同數量的引數,不同型別的引數或兩者。方法的返回型別,存取級別和throws子句對使其成為過載方法沒有任何影響。參考以下範例程式碼,其中有幾個名稱為 m1 方法。

import java.io.IOException;

class MyClass {
  public void m1(int a) {
    // Code goes here
  }

  public void m1(int a, int b) {
    // Code goes here
  }

  public int m1(String a) {
    // Code goes here
    return 0;
  }

  public int m1(String a, int b) throws IOException {
    // Code goes here
    return 0;
  }
}

範例-1

下面的程式碼顯示了如何使用過載。參考以下程式碼 -

public class Main {

  public double add(int a, int b) {
    System.out.println("Inside add(int a, int b)");
    double s = a + b;
    return s;//from  ww  w. ja  v a 2  s . c  om
  }

  public double add(double a, double b) {
    System.out.println("Inside add(double a,  double   b)");
    double s = a + b;
    return s;
  }

  public static void main(String[] args) {
    Main ot = new Main();
    int i = 1;
    int j = 1;
    double d1 = 10.42;
    float f1 = 22.3F;
    float f2 = 24.5F;
    short s1 = 22;
    short s2 = 26;

    ot.add(i, j);
    ot.add(d1, j);
    ot.add(i, s1);
    ot.add(s1, s2);
    ot.add(f1, f2);
    ot.add(f1, s2);
  }
}

上面的程式碼生成以下結果。

Inside add(int a, int b)
Inside add(double a,  double   b)
Inside add(int a, int b)
Inside add(int a, int b)
Inside add(double a,  double   b)
Inside add(double a,  double   b)

範例-2

有時,過載方法和自動型別擴充套件可能會混淆編譯器,導致編譯器錯誤。

class Adder {
  public double add(int a, double b) {
    return a + b;
  }

  public double add(double a, int b) {
    return a + b;
  }
}

public class Main {
  public static void main(String[] args) {
    Adder a = new Adder();
    // double d = a.add(2, 3); // A compile-time error
    double d1 = a.add((double) 2, 3); // OK. Will use add(double, int)
    double d2 = a.add(2, (double) 3); // OK. Will use add(int, double)

  }
}