переопределение строки с помощью var-args - PullRequest
0 голосов
/ 01 апреля 2019

Как правило, метод var arg переопределяется тем же методом, что и метод var arg, но в моем коде обычный метод переопределяется с помощью var args.

Но в целом методы var args должны переопределяться или переопределяться только другими методами 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

Ответы [ 3 ]

1 голос
/ 01 апреля 2019

Varargs - это просто синтаксическое суагрирование для массива того же типа, который указывает компилятору, что последовательность разделенных запятыми аргументов с этого момента должна рассматриваться как массив.С точки зрения подписи, String[] и String... одинаковы.Например, вы можете определить ваш основной метод как public static void main(String... args), если хотите.

1 голос
/ 01 апреля 2019

String[] и String... эквивалентны в некоторых случаях, поэтому go(String... s) может быть переопределено на go(String[] s).Это один из способов указать массив в Java.

0 голосов
/ 01 апреля 2019

Оба объявления эквивалентны, поскольку компилятор Java расширяет varargs в массив указанного типа. Таким образом, вы фактически переопределили go метод.

взгляните на https://www.journaldev.com/1257/java-varargs#how-java-varargs-work

...