Я готовлюсь к экзамену AP CS и столкнулся с этой проблемой практики в разделе ООП моей книги.Даны следующие два класса.
package chap4q9;
public class Person
{
private int age;
public Person(int a)
{
age = a;
}
public String toString()
{
return "Age: " + age + "\n";
}
}
package chap4q9;
public class Student extends Person
{
private double gpa;
public Student(int a, double g)
{
super(a);
gpa = g;
}
public String toString()
{
return super.toString() + "GPA: " + gpa; //This was where the missing code was
}
}
И вот клиентская программа, которая вызывает эти два класса.
package chap4q9;
public class Chap4Q9
{
public static void main(String[] args)
{
Student kathy = new Student(17, 3.85);
System.out.println(kathy);
}
}
Наконец, вывод:
Возраст: 17
ГПД: 3,85
На случай, если вам интересно, на самом деле не должно быть линии между возрастом и ГПД в выходных данных, что было странным форматированием, когдаЯ написал это.
Цель состояла в том, чтобы заменить отсутствующий код во втором методе toString (в приведенном выше коде был добавлен правильный ответ для отсутствующего кода, но я отметил местоположение).Я думал, что книга была неправильной, но запустил код и получил тот же результат.Я думал, что это просто напечатает ячейку памяти, в которой находилась Кэти, и если вы хотите получить этот вывод, вы должны будете напечатать kathy.toString ().Тем не менее, просто печатание Кэти, кажется, запускает метод toString в классе Student.Мой вопрос заключается в том, почему печатается объект Student, Кэти, получается этот вывод, а не просто место в памяти.Заранее спасибо за все ответы.