我一直收到错误:学生不是抽象的,并且不会覆盖java.lang.Comparable中的抽象方法compareTo(java.lang.Object)
这是为什么?这要做的是取一份学生名单并按照GPA进行比较。
public class Student implements Comparable
{
private String name;
private double gpa;
public Student(String name, double gpa)
{
this.name = name;
this.gpa = gpa;
}
public String getName()
{
return name;
}
public double getGpa()
{
return gpa;
}
public String toString()
{
return "Name: " + name + " GPA: " + gpa;
}
public double compareTo(Object other)
{
Student filler = (Student)other;
if(this.getGpa() < filler.getGpa())
return -1;
else if(this.getGpa() == filler.getGpa())
return 0;
else
return 1;
}
}
答案 0 :(得分:0)
public double compareTo(Object other)
应该是
@Override
public int compareTo(T other)
查看Comparable
界面。它需要一个名为compareTo
的方法,它采用类型T
(通用参数)的参数,返回int
。您创建的方法没有实现接口中指定的方法,这就是Java编译器抱怨的原因。
由于Comparable
接口是通用化的,因此您应该利用泛型并使您的类实现Comparable<Student>
。当您这样做时,compareTo
的签名变为:
@Override
public int compareTo(Student other)
哪个比原始Object
更好,因为您不必进行投射,更重要的是,您不会意外地传递非Student
的内容。
还有一件事:从接口实现方法时使用@Override
注释。假设您正在使用一个中等体面的IDE,如果您有:
@Override
public double compareTo(Object other)
由于界面中没有带有该签名的方法。
答案 1 :(得分:0)
要直接回答您的问题,您需要将compareTo()
的返回类型从double
更改为int
。
您还应该进行一些其他修改来改进代码:
实施Comparable<Student>
而非Comparable
。这使得您可以编写public int compareTo(Student other)
,并且只允许使用其他compareTo()
引用来调用Student
。
在@Override
和toString()
之前添加compareTo()
注释。此注释可帮助您避免编译器无法捕获的一些常见错误。
答案 2 :(得分:0)
compareTo方法返回int
而不是double
。
同样使用Override
注释有助于确保正确覆盖该方法。所以改变这个
public double compareTo(Object other)
到
@Override
public int compareTo(Object other)