为什么这对 Java 方法没有生成正确的重载条件? [已关闭]

问题描述 投票:0回答:1

这对不能在程序中共存并产生过载,但我不明白为什么不可以。我听说每一对都会单独工作,但不能一起工作。如果它们都存在于一个类中,则对 sum 的引用会在编译期间生成不明确的错误。

static void sum(int a, double b) {
    System.out.println(a);
 }


static void sum(double a, int b) {
 System.out.println(a);
}

我期望,因为参数的类型和顺序都不同,所以方法“sum”遵循正确的重载条件。

java overloading
1个回答
0
投票

这些方法不能共存于同一个类中,因为尝试调用它们时会出现歧义。两种方法具有相同的签名 (

void sum(double,int)
),这意味着它们共享相同的名称和相同数量的参数,但具有不同的参数数据类型。在 Java 中,方法在编译期间根据其参数的类型进行调用。当使用类似参数类型(例如
sum
int
int
double
)调用
double
方法时,编译器将无法确定应调用哪个方法,因为两者都与调用匹配签名。这种歧义会导致编译错误,因此这两种方法不能在同一上下文中共存。要解决此问题,需要重命名其中一个方法,或者需要修改其签名以使其不同,不仅重新排列参数,而且不会更改签名。

© www.soinside.com 2019 - 2024. All rights reserved.