可比较和比较

时间:2014-12-16 12:06:20

标签: java comparable compareto

我有问题。我有一个扩展另一个类并实现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;
  }  
 }
}
}

提前谢谢!

3 个答案:

答案 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>因此,为了在您的类中重写此方法,您需要更改其他类的变量类型从KeyFlightFlight

 @Override
 public int compareTo(Flight o) {
  //your logic here
 }