Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/116.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 面向对象的AP-CS实践_Java_Oop_Computer Science - Fatal编程技术网

Java 面向对象的AP-CS实践

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

我正在准备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似乎在学生课堂上运行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。