我有一个“人”类及其子类“学生”:
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感到困惑的原因。
答案 0 :(得分:2)
您是正确的,如果您在子类中重写了该方法,并且使用了super关键字,那么您将在父类上调用该方法。
在这种情况下除非,您要保证使用了父类中的方法,然后可以在不使用super关键字的情况下调用该方法,如果您覆盖该方法,则可以得到您在子类中想要的行为。
答案 1 :(得分:0)
如果扩展一个类,它将在其超类中具有所有属性。无需致电super.getName()
,您只需致电this.getName()
。