Java 面向对象的AP-CS实践
我正在准备AP CS考试,在书的OOP部分遇到了这个练习题。 下面给出了两个类Java 面向对象的AP-CS实践,java,oop,computer-science,Java,Oop,Computer Science,我正在准备AP CS考试,在书的OOP部分遇到了这个练习题。 下面给出了两个类 package chap4q9; public class Person { private int age; public Person(int a) { age = a; } public String toString() { return "Age: " + age + "\n"; } } package chap4
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
如果你想知道,在输出中年龄和GPA之间实际上不应该有一条线,当我发布这篇文章时,这是一个奇怪的格式化问题
目标是替换第二个toString方法中缺失的代码(在上面的代码中,插入了缺失代码的正确答案,但我标记了位置)。我认为这本书错了,但运行了代码,得到了相同的输出。我认为它只需打印kathy所在的内存位置,如果您想获得该输出,就必须打印kathy.toString()。然而,仅仅打印kathy似乎在学生课堂上运行toString方法。我的问题是,为什么打印学生对象kathy会得到输出,而不仅仅是一个内存位置。
提前感谢您的所有回复。这只是因为System.out.println默认调用对象的toString()方法。在您的例子中,您已经在子类中实现了自己的toString,因此使用了它 只有在Person和Student类中没有toString时,才会调用Object类中的toString,它会打印一个对象标识字符串,该字符串由类名和对象哈希代码的十六进制表示形式组成
有关对象类的更多详细信息,请参见javadoc:()这只是因为System.out.println默认调用对象的toString()方法。在您的例子中,您已经在子类中实现了自己的toString,因此使用了它 只有在Person和Student类中没有toString时,才会调用Object类中的toString,它会打印一个对象标识字符串,该字符串由类名和对象哈希代码的十六进制表示形式组成 有关对象类的更多详细信息,请参见javadoc:()
println(Object)
per-default调用String.valueOf(…)
方法。
看看:
)
和
)println(Object)
默认调用String.valueOf(…)
方法。
看看:
)
和
)你在两个类中都重写了toString()-你到底为什么认为会调用标准对象toString()方法?你在两个类中都重写了toString()-你到底为什么认为会调用标准对象toString()方法?我认为在书中的某个地方,它说在执行System.out.println时,如果有,它会自动调用toString方法。我想在书中的某个地方,它说当执行System.out.println时,如果有,它会自动调用toString方法。实际上它调用
String.valueOf(…)
,如果null
参数给定,它会输出“null”
。+1,-麦克芬尼根的1个。在这里,我们看到了优秀答案和完全无用答案之间的区别。好东西Robert M.实际上它调用了String.valueOf(…)
,如果给定null
参数,它将输出“null”
。+1用于此,-1用于mcfinnigan。在这里,我们看到了优秀答案和完全无用答案之间的区别。好东西罗伯特M。