为什么仅通过更改返回类型来重载函数是不可能的?这将在未来的Java版本中发生变化吗?
顺便说一句,仅供参考,这可能在C ++中使用吗?
答案 0 :(得分:142)
你不能用Java做,也不能用C ++做。理由是单独的返回值不足以让编译器找出要调用的函数:
public int foo() {...}
public float foo() {..}
...
foo(); // which one?
答案 1 :(得分:46)
答案 2 :(得分:22)
在Java 5.0之前,当您重写方法时,参数和返回类型必须完全匹配。在Java 5.0中,它引入了一个名为协变返回类型的新工具。您可以使用相同的签名覆盖方法,但返回返回的对象的子类。换句话说,子类中的方法可以返回一个对象,该对象的类型是方法返回的类型的子类,在超类中具有相同的签名。
答案 3 :(得分:5)
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");
}
}
答案 4 :(得分:1)
编译器在区分方法时不考虑返回类型,因此即使它们具有不同的返回类型,也不能声明具有相同签名的两个方法。
答案 5 :(得分:1)
重载方法时返回类型无关紧要。我们只需要确保没有歧义!
Java可以通过区分参数列表的类型来了解调用哪个方法的唯一方法。如果编译器允许两个具有相同名称和相同参数类型的方法,则无法确定应该调用哪个方法。
答案 6 :(得分:0)
编译器在区分方法时不考虑返回类型,因此即使它们具有不同的返回类型,也不能声明具有相同签名的两个方法。
如果你知道函数执行,那么你会发现当我们调用一个函数定义部分执行时,最后我们需要return语句,因此我们可以说函数的整个定义之后返回,这就是为什么如果那里是两个或多个具有相同名称和相同类型的函数。然后在调用编译器将如何知道要调用哪一个时参数,因为函数名称和参数是相同的。在首先调用时,所有焦点都将放在参数和函数名称上,最后在函数定义完成后我们处理return语句。
编译时错误优于运行时错误。因此,如果声明具有相同参数的相同方法,则java编译器会呈现编译器时间错误。
答案 7 :(得分:0)
重载方法是与任何其他同名方法完全不同的方法。重载只不过是名称重用。
答案 8 :(得分:-2)
不可能这样,你只能通过参数
的参数或数据类型来重载