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.
中获得所需的行为
我有一个 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.
中获得所需的行为