gpt4 book ai didi

java - 关于 varargs 参数的困惑

转载 作者:行者123 更新时间:2023-12-01 17:17:32 26 4
gpt4 key购买 nike

我对这段代码很困惑:

class A {}
class B extends A {}

public class ComingThru {
static String s = "-";

static void sifter(A[]... a2) {
s+="1";
}

static void sifter(B[]... b1) {
s+="2";
}

static void sifter(Object o) {
s+="4";
}

public static void main(String[] args) {
A[] aa = new A[2];
B[] ba = new B[2];
sifter(aa,ba);
System.out.println(s);
}
}

它的输出为-1,但应该会出现编译错误,因为没有找到匹配的函数。

最佳答案

不,这不会给出编译错误。因为有一个完美的方法签名与调用相匹配,因为 B 也是 A。这就是所谓的继承。如果你再检查一下代码,

class A {}
class B extends A {}

上面的代码可以编译并执行。

static void sifter(A[]... a2) { 
s+="1";
}

可以通过传递类型 A 或其子类型(即 A 的子类,即 B)的可变长度数组来调用上述方法

关于java - 关于 varargs 参数的困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20972530/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com