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)

  }
}