java - OOP AP CS 练习

标签 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 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 似乎正在运行 Student 类中的 toString 方法。我的问题是,为什么要打印 Student 对象 kathy 来获取该输出,而不仅仅是一个内存位置。 预先感谢所有回复。

最佳答案

这只是因为 System.out.println 默认情况下调用对象的 toString() 方法。在您的情况下,您已经在子类中实现了自己的 toString,因此使用了它。

仅当您的 Person 和 Student 类中没有 toString 时,才会调用 Object 类中的 toString,它会打印一个对象标识字符串,该字符串由类名和对象的 hashCode 的十六进制表示形式组成。

有关更多详细信息,请参阅对象类的 javadoc:http://download.oracle.com/javase/6/docs/api/java/lang/Object.html#toString ()

关于java - OOP AP CS 练习,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7649761/

相关文章:

php - 什么时候使用 self、parent、static 以及如何?

javascript - 对象中的变量范围

c - 调用另一个递归函数的递归函数的运行时分析

C使用Queue的单链表

java - Eclipse jar 导出和 lib 文件夹

java - 是否可以将 Groovy 的 SwingBuilder 与 Java JFrame 子类结合起来?

java - 从 listview 到我的自定义适配器的 setAdapter 编译器错误

Java - 递归程序 - 将以 10 为基数的数字转换为任何基数

delphi - 这两套代码有什么区别

algorithm - 找到给定概率的分位数的时间复杂度