переопределение строки с помощью переменных аргументов

#java #oop #methods #overriding #variadic-functions

#java #ооп #методы #переопределение #переменные функции

Вопрос:

Обычно метод 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

Ответ №1:

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

Комментарии:

1. «эквивалентно» почти . Вы можете вызвать метод varargs с явным массивом, но не наоборот.

2. это работает в версии 1.8, аналогично она также работает в версии 1.7 или 1.6

Ответ №2:

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

Комментарии:

1. это работает в версии 1.8, аналогично она также работает в версии 1.7 или 1.6

Ответ №3:

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

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