我正在努力了解“ this”关键字的特定用法。我在这里不明白的是为什么printPerson()
方法调用toString()
方法。
public class Person {
private String name;
private int age;
public Person(String aName, int anAge) {
name = aName;
age = anAge;
}
/** @return the String form of this person */
public String toString() {
return name + " " + age;
}
public void printPerson() {
System.out.println(this);
}
}
public class Driver {
public static void main(String[] args) {
Person mete = new Person("Mete", 21);
mete.printPerson();
}
}
答案 0 :(得分:0)
Java中的每个类都直接或间接地从Object类派生。如果一个类不扩展任何其他类,则它是Object的直接子类,如果扩展其他类,则它是一个间接派生的。因此,对象类方法可用于所有Java类。
Object类中目前有9个方法,并且toString()是其中之一。
如果您要在类中定义toString()方法,则意味着您要重写此方法,因为该方法已经存在于其超类(即Object类)中。
System.out.println需要任何以字符串格式显示的内容。如果你有这样的课 MyClass myClass =新的MyClass(); System.out.println(myClass); 在这种情况下,myClass.toString();将被调用,并且将显示toString()中定义的任何内容。 如果myClass没有自己的toString()方法,则 将调用并显示Object.toString()。
在您的情况下 此是指当前课程,因此 当您覆盖它时,System.out.println(this)调用其自己的toString()。 而且,如果您删除toString()定义,那么Object.toString()将会被调用而不会出现任何编译错误。