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