JAVA: 在子类中使用超类的 getter 和 setter 的正确方法

JAVA: Proper way to use superclass' getter and setter in subclass

我有一个 class 人及其子class 学生:

public class Person {

private String name;

public Person(String name) {
    this.name = name;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}
}

public class Student extends Person {

private int grade;

public Student(String name, int grade) {
    super(name);

    this.grade = grade;
}

public int getGrade() {
    return grade;
}

public void setGrade(int grade) {
    this.grade = grade;
}

public void printDescription() {
    System.out.println("Name: " + getName());
    System.out.println("Grade: " + Integer.toString(grade));
}

}

所以 Person 的名字有 getter 和 setter 属性 而 Student 的新成绩只有 getter 和 setter 属性 ,只要一个 printDescription() 方法。 问题是我应该如何正确调用 Student 的 printDescription() 方法中的名称 属性?

考虑到 Student 从 parent class 继承 getter 和 setter,我像上面的代码一样实现了它。 但是在我的大学 Java 老师要求这样使用它:

public void printDescription() {
    System.out.println("Name: " + super.getName());
    System.out.println("Grade: " + Integer.toString(grade));
}

所以他提出直接打电话给parent的getter。 我认为这不是最好的方法,因为如果我们在 Student class 中覆盖 name 的 getter,Person 中的 getter 仍然会被调用。

那么在这种情况下使用名称 属性 的最佳方法是什么?

UPD:值得一提的是,对于此任务,不需要专门调用 superclass' getter 实现,这就是为什么我对老师的建议使用 super 感到困惑。

如果你扩展一个 class ,它将拥有它的 superclass 中的所有属性。你可以直接调用 this.getName().

而不是调用 super.getName()

你是对的,如果你重写子class中的方法并且你使用的是super关键字,那么你将调用父class中的方法。

在这种情况下除非你想保证父class中的方法被使用,那么只调用没有super关键字的方法就可以了如果您覆盖该方法,那么您将在 subclass.

中获得所需的行为