gpt4 book ai didi

java - SC Java 程序员 6 考试

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

有考试程序。谁能解释一下“-434”的答案:

class A {}
class B extends A {}
public class ComingThru {
static String s = "-";
public static void main (String[] args) {
A[] aa = new A[2];
B[] ba = new B[2];
sifter(aa);
sifter(ba);
sifter(7);
System.out.print(s);
}
static void sifter(A[]... a2) { s += "1";}
static void sifter(B[]... b1) { s += "2";}
static void sifter(B[] b1) { s += "3";}
static void sifter(Object o) { s += "4";}
}

谢谢!

最佳答案

您可能知道,当调用带有多个不同参数集的方法时,Java 将尝试调用最具体的一个。因此,例如,sifter(Object) 方法可以应用于任何对象,但如果已知该对象是 B[],则更具体的 sifter(B[]) 方法将被调用。

棘手的一点是,为了确保向后兼容性,当 Java 尝试确定要调用什么方法时,它首先查看是否有任何适用的非可变参数方法。只有当没有这样的方法时,它才会考虑 varargs 选项。

http://java.sun.com/docs/books/jls/third_edition/html/expressions.html#15.12.2

因此,当使用 A[] 调用 sifter() 时,非可变参数方法 sifter(Object) 是适用的,并且所以编译器根本不会考虑 sifter(A[]...)

关于java - SC Java 程序员 6 考试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8780235/

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