重载 - 在Java中使用不同的返回类型进行重载?
为什么仅通过更改返回类型来重载函数是不可能的? 这将在未来的Java版本中发生变化吗?
那么,仅供参考,这在C ++中是否可行?
nunos asked 2019-09-15T23:26:09Z
8个解决方案
141 votes
你不能用Java做,也不能用C ++做。 理由是单独的返回值不足以让编译器找出要调用的函数:
public int foo() {...}
public float foo() {..}
...
foo(); // which one?
Alexander Gessler answered 2019-09-15T23:26:22Z
47 votes
原因是Java中的重载仅允许具有不同签名的方法。
返回类型不是方法签名的一部分,因此不能用于区分重载。
请参阅Java教程中的定义方法。
Oded answered 2019-09-15T23:26:59Z
21 votes
在Java 5.0之前,当您重写方法时,参数和返回类型必须完全匹配。 在Java 5.0中,它引入了一个名为协变返回类型的新工具。 您可以使用相同的签名覆盖方法,但返回返回的对象的子类。 换句话说,子类中的方法可以返回一个对象,该对象的类型是由超类中具有相同签名的方法返回的类型的子类。
Daneel S. Yaitskov answered 2019-09-15T23:27:23Z
5 votes
Overloaded java中的方法可能有不同的返回类型,因为参数也不同。
查看示例代码。
public class B {
public String greet() {
return "Hello";
}
//This will work
public StringBuilder greet(String name) {
return new StringBuilder("Hello " + name);
}
//This will not work
//Error: Duplicate method greet() in type B
public StringBuilder greet() {
return new StringBuilder("Hello Tarzan");
}
}
Abdullah Khan answered 2019-09-15T23:27:53Z
1 votes
在区分方法时,编译器不考虑返回类型,因此即使它们具有不同的返回类型,也不能使用相同的签名声明两个方法。
Ganesh answered 2019-09-15T23:28:16Z
1 votes
重载方法时返回类型无关紧要。 我们只需要确保没有歧义!
Java可以通过区分参数列表的类型来了解调用哪个方法的唯一方法。 如果编译器允许两个具有相同名称和相同参数类型的方法,则无法确定应调用哪个方法。
Vinayak answered 2019-09-15T23:28:47Z
0 votes
在区分方法时,编译器不考虑返回类型,因此即使它们具有不同的返回类型,也不能使用相同的签名声明两个方法。
如果你知道函数执行,那么你会发现当我们调用一个函数时,定义部分执行,最后我们需要return语句,因此我们可以说return返回函数的完全定义之后,这就是为什么如果有两个或者 更多具有相同名称和相同类型的功能。 然后在调用编译器将如何知道要调用哪一个时参数,因为函数名称和参数是相同的。 在首先调用时,所有焦点都将放在参数和函数名称上,最后在函数定义完成后我们处理return语句。
编译时错误优于运行时错误。 因此,如果声明具有相同参数的相同方法,则java编译器会呈现编译器时间错误。
LearnAndHelp answered 2019-09-15T23:29:20Z
-1 votes
不可能这样,你只能通过参数的参数或数据类型来重载
MAYANK AMRIT answered 2019-09-15T23:29:44Z