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

在重载函数的返回类型没有起到任何作用。 函数重载只能通过改变参数来实现。 所以,是在您的特定情况下的测试()超载