天天看點

java overloading_Overloading in Java

重載 (Overload)允許不同的方法有相同的名稱,但不同的簽名(signatures),其中簽名可以是不同的輸入參數數量或者不同的輸入參數類型。重載與編譯時(或靜态)多态相關。

// Java program to demonstrate working of method

// overloading in Java.

public class Sum {

// Overloaded sum(). This sum takes two int parameters

public int sum(int x, int y) {

return (x + y);

}

// Overloaded sum(). This sum takes three int parameters

public int sum(int x, int y, int z) {

return (x + y + z);

}

// Overloaded sum(). This sum takes two double parameters

public double sum(double x, double y) {

``` return (x + y);

}

// Driver code

public static void main(String args[]) {

Sum s = new Sum();

System.out.println(s.sum(10, 20));

System.out.println(s.sum(10, 20, 30));

System.out.println(s.sum(10.5, 20.5));

}

}

輸出:

30

60

31.0

多态的好處都有啥?

我們不必為了處理相同任務的方法起更多的名稱,類似于上面的代碼,我們不用起諸如 sumInt, sumDouble,...,sumInt3,...之類的各種名稱。

傳回值類型能否重載?

答案是 No,這點和 C++ 是相同的,例如:

public class Main {

public int foo() {

return 10;

}

// compiler error: foo() is already defined

public char foo() {

return 'a';

}

public static void main(String args[]) {

}

}

靜态方法能否重載?

答案是 Yes,一個類可以有多個名稱相同參數不同的靜态方法。可以參考詳情。

Main() 方法能否重載?

和靜态方法重載一樣,答案是可以的。

// A Java program with overloaded main()

import java.io.*;

public class Test {

// Normal main()

public static void main(String[] args) {

System.out.println("Hi Geek (from main)");

Test.main("Geek");

}

// Overloaded main methods

public static void main(String arg1) {

System.out.println("Hi, " + arg1);

Test.main("Dear Geek","My Geek");

}

public static void main(String arg1, String arg2) {

System.out.println("Hi, " + arg1 + ", " + arg2);

}

}

輸出:

Hi Geek (from main)

Hi, Geek

Hi, Dear Geek, My Geek

Java 是否允許操作符(Operator)重載?

與C++不同,Java 不允許自定義重載操作符。Java 内部允許重載操作符,如 + 被用于連接配接字元串。

重載(Overload)和重寫(Override)的差別?

重載是有相同功能的方法有不同的簽名,重寫兩個方法可能有相同的功能,相同的簽名,但是需要不同的類通過繼承連接配接。

java overloading_Overloading in Java

OverridingVsOverloading.png

重載是編譯時多态,重寫是運作時多态。