用可变参数覆盖字符串

overridding string with var-args

一般情况下,Var arg 方法用相同的方法覆盖 var arg 方法,但在我的代码中,普通方法用 var args 覆盖。

但与 Test.go(String[])A.go(String...).

不同,一般情况下,可变参数方法只能覆盖其他可变参数方法或被其他可变参数方法覆盖

但我得到了输出 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

String[]String... 在某些情况下是等效的,因此 go(String... s) 可以被 go(String[] s) 覆盖。 java.

中表示数组的方式之一

Varargs 只是对相同类型数组的语法糖化,它向编译器指示从此时开始的一系列以逗号分隔的参数应被视为一个数组。从签名的角度来看,String[]String... 是相同的。例如,如果需要,您可以将主要方法定义为 public static void main(String... args)

这两个声明是等效的,因为 Java 编译器将可变参数扩展为指定类型的数组。 所以你已经有效地覆盖了 go 方法。

看看https://www.journaldev.com/1257/java-varargs#how-java-varargs-work