Dhr*_*val 4 java overloading compiler-errors
我正在尝试理解方法重载,但无法理解以下示例中出现以下代码错误的原因
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) { }
}
Run Code Online (Sandbox Code Playgroud)
我收到一个错误:
方法 sum(int, long) 对于 OverLoading_OverRiding 类型是不明确的。
当我在同一个示例上执行显式转换时,它可以工作:
o.sum(5, (long)5);
Run Code Online (Sandbox Code Playgroud)
问题是你的编译器不知道如果你调用 o.sum(5, 5);
他可以使用void sum(int i, long j) { }他将第一个 5 作为 int 和第二个 5 作为 long 的地方
他可以使用void sum(long i, int j) { }
他把前 5 个和第二个 5 一样长的地方
由于这两种方法都可以在本示例中使用,并且您的编译器始终只需要一个有效选项,因此您会收到错误消息,表明您的方法不明确。
如果你调用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) {}
Run Code Online (Sandbox Code Playgroud)
所以你可以像这样调用这个方法:
myMethod(42);
myMethod(42, true);
myMethod(42, "myString");
Run Code Online (Sandbox Code Playgroud)
也许这让您对方法重载有了一个想法。
| 归档时间: |
|
| 查看次数: |
11384 次 |
| 最近记录: |