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

时间:2019-02-01 08:38:20

标签: java inheritance setter getter

我有一个“人”类及其子类“学生”:

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));
}

}

所以人有name属性getter和setter和学生只有getter和setter其新的高档楼盘,只要printDescription()方法。 问题是如何正确调用Student的printDescription()方法中的name属性?

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

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

因此,他提出直接致电父母的getter。 我认为这不是最好的方法,因为如果我们在Student类中覆盖了名称的getter,那么Person的getter仍将被调用。

那么在这种情况下使用name属性最好的方法是什么?

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

2 个答案:

答案 0 :(得分:2)

您是正确的,如果您在子类中重写了该方法,并且使用了super关键字,那么您将在父类上调用该方法。

在这种情况下除非,您要保证使用了父类中的方法,然后可以在不使用super关键字的情况下调用该方法,如果您覆盖该方法,则可以得到您在子类中想要的行为。

答案 1 :(得分:0)

如果扩展一个类,它将在其超类中具有所有属性。无需致电super.getName(),您只需致电this.getName()