Как вызвать абстрактный метод (переопределенный в подклассах) из суперкласса? - PullRequest
0 голосов
/ 18 октября 2019

У меня есть абстрактный метод в абстрактном классе, студент. Подкласс, JUPASStudent переопределяет его. Сейчас я пытаюсь отсортировать ArrayList типа Student. Требуется вызвать этот абстрактный метод, но я не могу этого сделать.

Я пишу здесь свой частичный код.

Суперкласс:

abstract class Student {
    protected String name;

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

    public String getName() {
        return name;
    }
    abstract double getResult(); //abstract method 

}

Подкласс:

public class JUPASStudent extends Student {
    private double dseResult;

    public JUPASStudent(String n, double d) {
        super (n);
        this.dseResult = d;
    }

    public double getResult() {
        return dseResult;   //abstract method is overridden here
    }
    public String getName() {
        return super.name;
    }
    public void setResult(double dseResult) { 
        this.dseResult = dseResult;
    }
    public void setName(String name) {
        super.name = name;
    }
}

Теперь я пишу функцию сортировки всоздать ArrayList (класс ученика)

public ArrayList <Student> sort(ArrayList<Student> sList){
        sList.sort(Comparator.comparingInt(Student::getResult));
        return sList;
    }

Ввод:

A 9
B 5
C 8

Ожидаемый результат:

B 5
C 8
A 9

Ошибка

-The method comparingInt(ToIntFunction<? super T>) in the type Comparator is not applicable for the arguments (Student::getResult) 

-The type Student does not define getResult(T) that is applicable here

Ответы [ 2 ]

0 голосов
/ 18 октября 2019

getResult () возвращает double, попробуйте вернуть Int, и я думаю, что это сработает. редактировать: или использовать метод comparingDouble ()

0 голосов
/ 18 октября 2019

Если вы переопределили метод в подклассе, он будет использовать реализацию подкласса, поэтому не беспокойтесь о его явном вызове, по крайней мере, в вашем случае

...