Можно ли передать массив String в качестве параметра методу, который принимает массив объектов в качестве аргумента? [closed]

Почему после объявления переменной для массива String ее можно передать методу, принимающему массив объектов? Сейчас же, String — это класс сам по себе, поэтому я давно предположил, что все переменные в определенном смысле являются объектами. Но многие со мной спорили по этому поводу. Но здесь он показывает такое же поведение.

Ниже приведен код, в котором работает передача, и комментарии указывают на них.

public class Knuth {
private Knuth() { }

// HERE SHOWS IT TAKES OBJECT
public static void shuffle(Object[] a)

{
int n = a.length;
for (int i = 0; i < n; i++) {
int r = (int) (Math.random() * (i + 1));
Object swap = a[r];
a[r] = a[i];
a[i] = swap;
}
}

public static void shuffleAlternate(Object[] a) {
int n = a.length;
for (int i = 0; i < n; i++) {
int r = i + (int) (Math.random() * (n - i));
Object swap = a[r];
a[r] = a[i];
a[i] = swap;
}
}


public static void main(String[] args) {

// HERE SHOWS IT IS PASSING STRING ARRAY
String[] a = StdIn.readAllStrings();
 
        Knuth.shuffle(a);

for (int i = 0; i < a.length; i++)
StdOut.println(a[i]);
}
}

1 ответ
1

Строка расширяет тип объекта: https://docs.oracle.com/javase/7/docs/api/java/lang/String.html
Это означает, что суперкласс String — это Object, поэтому любая функция, требующая параметра Object как параметр, также принимает String как параметр. Вы можете прочитать здесь, например, о наследовании: https://www.tutorialspoint.com/java/java_inheritance.htm

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *