JAVA: правильный способ использовать метод получения и установки суперкласса в подклассе - PullRequest
0 голосов
/ 01 февраля 2019

У меня есть класс Person и его подкласс Student:

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 для свойства name, а Student имеет только getter и setter для его нового свойства grade, если только printDescription () метод.Проблема заключается в том, как правильно вызвать свойство name в методе студента printDescription ()?

Я реализовал это, как в приведенном выше коде, учитывая, что Student наследует getter и setter от родительского класса.Но в моем университете учитель Java просит использовать его следующим образом:

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

Поэтому он предлагает напрямую вызвать метод родительского вызова.Я думаю, что это не лучший способ, потому что в случае, если мы переопределим имя геттера в классе Student, вместо него все равно будет вызываться getter из Person.

Так какой подход лучше использовать в этой ситуации для свойства name?

UPD: важно отметить, что для этой задачи не требуется специально вызывать реализацию-получатель суперкласса, поэтому меня смутила рекомендация учителя использовать super.

Ответы [ 2 ]

0 голосов
/ 01 февраля 2019

Вы правы, что если вы переопределите метод в подклассе и используете ключевое слово super, вы вызовете метод в родительском классе.

В этом случае , если вы хотели гарантировать, что метод в родительском классе использовался, тогда можно просто вызывать метод без ключевого слова super, и таким образом, если вы переопределите метод, вы получите поведение, которое вы хотите в подклассе.

0 голосов
/ 01 февраля 2019

если вы расширяете класс, он будет иметь все свойства в своем суперклассе.вместо звонка super.getName() вы можете просто позвонить this.getName().

...