我试图理解方法重载,但无法理解以下示例中出现以下代码错误的原因
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) { }
}
我收到错误:
方法 sum(int, long) 对于类型不明确
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
因为这两种方法都可以在本示例中使用,并且您的编译器始终需要正好一个有效选项,您会收到错误消息,表明您的方法不明确。
如果你打电话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");
也许这会让您了解方法重载。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)