我试图理解方法重载,但我无法理解以下示例中出现以下代码错误的原因
public class OverLoading_OverRiding {
public static void main(String[] args) {
OverLoading_OverRiding o = new OverLoading_OverRiding();
o.sum(5, 5);
}
void sum(int i, long j) { }
void sum(long i, int j) { }
}
我收到一个错误:
The method sum(int, long) is ambiguous for the type OverLoading_OverRiding.
当我对同一个示例执行显式转换时,它会起作用:
o.sum(5, (long)5);
最佳答案
问题是如果你调用 o.sum(5, 5);
他可以使用
void sum(int i, long j) { }
,其中他将前 5 个作为 int,将第二个 5 作为 long他可以使用
void sum(long i, int j) { }
他将前 5 个作为 long,将第二个 5 作为 int
因为在这个例子中这两种方法都有效,而且你的编译器总是需要exactly one有效选项,所以你会收到错误消息,指出你的方法不明确。
如果你调用 o.sum(5, (long)5);
它只匹配方法 void sum(int i, long j) { }
问题是,为什么要以这种方式重载方法? 重载主要用于像这样的可选参数:
void myMethod(int i) {}
void myMethod(int i, bool b) {}
void myMethod(int i, string s) {}
所以你可以这样调用这个方法:
myMethod(42);
myMethod(42, true);
myMethod(42, "myString");
也许这会让您了解方法重载。
关于java - 方法不明确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29362998/