Java中的重载和方法返回类型的关系?

时间:2015-08-08 10:29:16

标签: java methods overloading return-type

如果有两种方法,则它们具有不同的参数,其返回类型为不同。像这样:

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

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

如果返回类型相同,当然这是重载。但由于返回类型不同,我们还可以将其视为重载吗?

4 个答案:

答案 0 :(得分:5)

引用the official tutorial

  

Java编程语言支持重载方法,Java可以区分具有不同方法签名的方法。这意味着如果类中的方法具有不同的参数列表,则它们可以具有相同的名称(有一些资格,将在标题为“接口和继承”的课程中讨论)。

具有不同的返回类型对于重载是无关紧要的。实际上,这对返回其中一个参数的方法很常见。例如,java.util.Math有一堆重载的max方法。两个max中的int返回intmax两个double返回double等。

答案 1 :(得分:4)

是的,这也是一个过载。由于方法重载的目的只将名称和参数列表视为方法签名的一部分,因此test方法都是彼此重载。

也可能有一些有用的方案来重载这样的方法。考虑这个例子:

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);

并且重载使得代码对于不同类型的变量看起来相同。

答案 2 :(得分:3)

考虑以下几点进行重载:

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;
    }
}

答案 3 :(得分:1)

在函数重载中,返回类型不起任何作用。 只能通过更改参数来实现函数重载。 所以,在您给定的情况下,是的,test()过载