带有不同签名和返回类型的方法重载
问题描述:
方法重载是可能的仅当重载的方法具有不同的签名。 如果签名相同并且只有返回类型不同,则不可能。从Java文档带有不同签名和返回类型的方法重载
报价:
鉴别方法时,编译器不考虑返回类型,所以即使他们有不同的返回类型不能声明两种方法具有相同签名。
但是,具有不同签名和不同返回类型的重载方法同时出现什么问题?为什么会出现错误?
答
这应该是确定每JLS 8.4.9:
...还有就是返回类型之间或抛出的两种方法具有相同名称的条款,除非他们的签名是覆盖当量之间没有必要的关系。
例如,这个编译并运行良好:
public class Test {
void move(int x, int y) {
System.out.println("inside void move(int x, int y)");
}
int move(double x, double y) {
System.out.println("inside int move(double x, double y)");
return 0;
}
public static void main(String[] args) {
Test test = new Test();
test.move(0, 0);
test.move(0.0, 0.0);
}
}
关于你贴的代码,你的错误 - 你不返回任何东西!您的int a(...)
方法被声明为返回一个int,并且不返回任何内容。课程:阅读错误消息。
答
代码中的错误与方法重载无关。
你的第三个方法应该返回一个int。它有一个空的身体,所以它不会返回任何东西。如果您将其更改为
int a(double q){
return 0;
}
错误就会消失
什么是JLS必须要在这说什么? – 2015-04-04 18:19:52
请显示给出错误的代码。 – Eran 2015-04-04 18:20:56
你的错误是 - 你没有返回任何东西!你的'int a(...)'方法被声明为返回一个int并且你什么也没有返回。课程:阅读错误消息。 – 2015-04-04 18:25:47