我尝试了以下两种情况:
void ssss(int b){
System.out.println ("int"+b);
}
void ssss(double b){
System.out.println ("long"+b);
}
并调用了一个方法
ssss(100);
这很好用。
void calcAve(double marks1, int marks2) {
System.out.println ("first average");
}
void calcAve(int marks1, double marks2) {
System.out.println ("second average");
}
并进行方法调用
calcAve(2,3);
这返回了编译错误:对 calcAve 的引用不明确。
了解为什么第二个会出现编译错误。我的问题是使用相同的类比,第一种情况也应该返回错误,但事实并非如此。为什么??
最佳答案
直观地,在第一种情况下有一个精确的类型匹配,而在第二种情况下有两个同样好的不精确匹配(两个 int
中的任何一个都可以提升为 双
).
确切的规则相当复杂,但您可以在 JLS 中找到它们:§15.12.2. Compile-Time Step 2: Determine Method Signature .
解决歧义的一种方法是更改参数的类型:
calcAve(2.0, 3);
calcAve(2, 3.0);
关于java方法重载: abnormal behaviour,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26113652/