java 类型重载,重载 - 在Java中使用不同的返回类型进行重载?

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值