通常Var arg方法使用相同的方法var arg方法覆盖,但在我的代码中,普通方法使用var args覆盖。
但是通常,与Test.go(String[])
和A.go(String...)
不同,Var args方法只能覆盖或由其他var args方法覆盖。
但是我得到了输出T。
class A{
public void go(String...s){
System.out.println("A");
}
}
class Test extends A {
public void go(String[] a){
System.out.println("T");
}
public static void main(String[] args){
A a = new Test();
a.go("dd");
}
}
输出:T
答案 0 :(得分:1)
String[]
和String...
在某些情况下是等效的,因此go(String... s)
可以被go(String[] s)
覆盖。这是在Java中指示数组的方法之一。
答案 1 :(得分:1)
Varargs只是对相同类型数组的语法加糖,它向编译器指示从此刻开始,一系列用逗号分隔的参数应视为数组。从签名的角度来看,String[]
和String...
是相同的。例如,您可以根据需要将main方法定义为public static void main(String... args)
。
答案 2 :(得分:0)
这两个声明是等效的,因为Java编译器将varargs扩展为指定类型的数组。
因此,您已经有效地覆盖了go
方法。
看看https://www.journaldev.com/1257/java-varargs#how-java-varargs-work