java方法重载: abnormal behaviour

标签 java overloading

我尝试了以下两种情况:

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/

相关文章:

c++ - "hidden overloaded virtual function"超过 2 个类

c++ - 按返回类型重载模板

java - switch 语句中用于案例选择的常量映射?

java - 测试 Spring Controller : Invoke service methods or mock results

java - 使用两个斜线分隔转换的处理文件保存

java - 在 JavaScript 中设置和获取请求 header

java - 运行时 exec sh 不执行任何操作

c - 类型重载宏

java - 静态方法重载错误

C++ 具有不同返回类型的相同函数参数