如果有两种方法,则它们具有不同的参数,其返回类型为不同。像这样:
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 :(得分:5)
Java编程语言支持重载方法,Java可以区分具有不同方法签名的方法。这意味着如果类中的方法具有不同的参数列表,则它们可以具有相同的名称(有一些资格,将在标题为“接口和继承”的课程中讨论)。
具有不同的返回类型对于重载是无关紧要的。实际上,这对返回其中一个参数的方法很常见。例如,java.util.Math
有一堆重载的max
方法。两个max
中的int
返回int
,max
两个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()过载