#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