3

如果有兩種方法,他們有不同的參數,他們的返回類型是不同。就像這樣:Java中重載和方法返回類型的關係?

int test(int p) { 
    System.out.println("version one"); 
    return p; 
} 

boolean test(boolean p, int q) { 
    System.out.println("version two"); 
    return p; 
} 

如果返回類型是一樣的,當然這是超載。但既然退貨類型是不同,我們可以把這個看成是過載還是?

+0

是的。重載時,唯一重要的是方法的名稱。 –

+1

@JeroenVannevel參數的數量/類型是不同的(並且不兼容)。 – biziclop

+0

@biziclop:這就是區分重載和彼此的區別。但這只是決定它們首先是超載的名稱。 –

回答

1

考慮以下幾點超載:

1)第一和重要的規則在Java中重載的方法是改變方法簽名。方法簽名由參數數量,參數類型和參數順序(如果它們具有不同的類型)組成。

public class DemoClass { 
    // Overloaded method 
    public Integer sum(Integer a, Integer b) { 
     return a + b; 
    } 

    // Overloading method 
    public Integer sum(Float a, Integer b) { //Valid 
     return null; 
    } 
} 

2)方法的返回類型是從未方法簽名的一部分,所以只改變方法的返回類型並不等於方法重載。從方法

public class DemoClass { 
    // Overloaded method 
    public Integer sum(Integer a, Integer b) { 
     return a + b; 
    } 

    // Overloading method 
    public Float sum(Integer a, Integer b) {  //Not valid; Compile time error 
     return null; 
    } 
} 

3)拋出的異常超載的方法時,也沒有考慮。所以你的重載方法拋出相同的異常,一個不同的異常,或者它不會拋出任何異常;對方法加載沒有任何影響。

public class DemoClass { 
    // Overloaded method 
    public Integer sum(Integer a, Integer b) throws NullPointerException{ 
     return a + b; 
    } 

    // Overloading method 
    public Integer sum(Integer a, Integer b) throws Exception{ //Not valid; Compile time error 
     return null; 
    } 
} 
4

是的,這也是一種超載。由於只有名稱和參數列表被認爲是方法超載的方法簽名的一部分,因此兩個方法都是相互重載的。

也可能有這樣的重載方法的有用方案。考慮下面這個例子:

class Sanitizer { 
    public static String sanitize(String s) { 
     ... 
    } 
    public static int sanitize(int s) { 
     ... 
    } 
    public static double sanitize(double s) { 
     ... 
    } 
} 

誰使用Sanitizer可以寫東西像

String s2 = Sanitizer.sanitize(s1); 
int num2 = Sanitizer.sanitize(num1); 

和過載使代碼尋找不同類型的變量相同的程序員。

4

引述the official tutorial

Java編程語言的支持重載方法,和Java可以用不同的方法簽名的方法加以區分。這意味着如果一個類中的方法具有不同的參數列表,那麼類中的方法可以具有相同的名稱(這有一些限制,將在標題爲「接口和繼承」的課程中討論)。

擁有不同的返回類型對超載無關緊要。實際上,這對於返回它們的一個參數的方法來說很常見。例如,java.util.Math有一堆超載的max方法。兩個intmax返回int,兩個doublemax返回double

1

在重載函數的返回類型沒有起到任何作用。 函數重載只能通過改變參數來實現。 所以,是在您的特定情況下的測試()超載