重载 - 在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