方法不明确

2024-06-28

我试图理解方法重载,但无法理解以下示例中出现以下代码错误的原因

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);

  1. 他可以使用void sum(int i, long j) { }他将前 5 个作为 int ,将后 5 个作为 long

  2. 他可以使用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(使用前将#替换为@)

方法不明确 的相关文章

随机推荐