【问题标题】:How to call an abstract method (overridden in subclasses) from the superclass?如何从超类调用抽象方法(在子类中被覆盖)?
【发布时间】:2020-02-15 06:35:24
【问题描述】:

我在一个抽象类中有一个抽象方法,Student。 子类 JUPASStudent 覆盖它。 现在我正在尝试对 Student 类型的 ArrayList 进行排序。它需要调用该抽象方法,但我无法这样做。

我在这里写我的部分代码。

超类:

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

【问题讨论】:

  • 你能说说你想要达到的目标吗?
  • 无需覆盖getName() / setName()
  • “但我做不到” ...为什么?发生了什么?
  • 我正在尝试按录取结果的升序对 ArrayList 数组列表中的学生进行排序@K.D.
  • @Tom 我已经编辑了问题并在最后提到了错误

标签: java sorting methods polymorphism superclass


【解决方案1】:

如果您在子类中重写了该方法,它将使用子类的实现,因此不必担心显式调用它,至少在您的情况下

【讨论】:

  • 错误一:Comparator 类型中的方法 comparisonInt(ToIntFunction super T>) 不适用于参数 (Student::getResult)
  • 错误2:Student类型没有定义这里适用的getResult(T)
  • 尝试“comparingDouble”,因为巡演结果是 Double,而不是 Integer
  • 是的,它消除了错误。但我不明白:什么是“旅游”结果?
  • @djm 可能意味着“你的”结果
【解决方案2】:

getResult() 正在返回 double,尝试返回 Int,我认为它会起作用。 编辑: 或使用 compareDouble() 方法

【讨论】:

  • 知道了。谢谢!
猜你喜欢
  • 1970-01-01
  • 2019-12-09
  • 2016-01-02
  • 1970-01-01
  • 2016-01-27
  • 2017-08-27
  • 1970-01-01
  • 2011-12-13
  • 1970-01-01
相关资源
最近更新 更多