我有问题。我有一个扩展另一个类并实现Comparable的类。但是当我尝试编译我的程序时,我遇到了这个错误:Flight不是抽象的,并且不会覆盖抽象方法compareTo。无论如何,飞行代码是这样的:
class Flight extends KeyFlight implements Comparable<Flight>{
public KeyFlight kf;
public boolean departure;
public void Flight(){
KeyFlight kf=new KeyFlight();
boolean departure=false;
}
public int compareTo(KeyFlight other){
if (kf.time==other.time){
if (kf.key<other.key){
return kf.key;
} else {
return other.key;
}
} else {
if (kf.time <other.time){
return kf.key;
} else {
return other.key;
}
}
}
}
提前谢谢!
答案 0 :(得分:2)
你应该使用
implements Comparable<KeyFlight>
而不是
implements Comparable<Flight>
因为你想比较两个关键飞行而不是航班本身。您在compareTo中定义的参数类型应与您要与之比较的implements子句中指定的类型匹配。
您的代码的另一个问题是,在您的构造函数中,您正在重新定义KeyFlight,它应该是
public void Flight(){
kf=new KeyFlight();
否则你将来会得到NullPointerException。同样适用于您的离境布尔值。
旁注,java boolean中的默认值初始化为false,因此您不必在构造函数中明确说明。
答案 1 :(得分:1)
我认为compareTo的参数类型是错误的,它应该是
public int compareTo(Flight other){
答案 2 :(得分:0)
您班级中的compareTo
方法不是有效的覆盖,因为您定义了类实现Comparable<Flight>
因此,为了在您的类中重写此方法,您需要更改其他类的变量类型从KeyFlight
到Flight
。
@Override
public int compareTo(Flight o) {
//your logic here
}