方法重载是可能的仅当重载方法具有不同的签名时。 如果签名相同且只有返回类型不同,则无法实现。
来自Java Docs的引用:
编译器在区分方法时不考虑返回类型,因此即使它们具有不同的返回类型,也不能声明具有相同签名的两个方法。
但是,同时重载具有不同签名和不同返回类型的方法有什么问题?为什么会出错?
答案 0 :(得分:3)
根据JLS 8.4.9:
,这应该没问题例如,这编译并运行良好:...两个方法的返回类型之间或throws子句之间没有必需的关系,除非它们的签名是覆盖等价的。
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而您什么都不返回。课程:阅读错误消息。
答案 1 :(得分:1)
代码中的错误与方法重载无关。
你的第三个方法应该返回一个int。它有一个空的身体,所以它没有返回任何东西。如果将其更改为
int a(double q){
return 0;
}
错误将消失