Java-“ this”的特定用法存在问题

时间:2019-04-12 19:12:50

标签: java this

我正在努力了解“ 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();
    }
}

1 个答案:

答案 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()将会被调用而不会出现任何编译错误。