用var-args覆盖字符串

时间:2019-04-01 07:36:18

标签: java methods override variadic-functions

通常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

3 个答案:

答案 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