2014-12-16 2 views
-1

У меня проблема. У меня есть класс, который расширяет другой класс и реализует 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; 
    } 
} 
} 
} 

Заранее благодарю вас!

ответ

2

Вы должны использовать

implements Comparable<KeyFlight> 

Вместо

implements Comparable<Flight> 

Как вы хотите сравнить два keyflights а не самолеты. Тип параметра, который вы определяете в compareTo, должен совпадать с типом, указанным в предложении tools, с которым вы собираетесь сравнивать.

Еще одна проблема с вашим кодом является, в конструкторе вы повторно определяющего KeyFlight, он должен быть

public void Flight(){ 
    kf=new KeyFlight(); 

Иначе вы получите NullPointerException в будущем. То же самое относится к вашему выходу boolean.

Примечание, по умолчанию в java boolean инициализируется false, поэтому вам не нужно явно указывать это в конструкторе.

+0

Так что имеет значение, в каком классе вы реализуете Comparable. Это важно, что он сравнивает? И спасибо, что он скомпилирован успешно! – userNo2209

+0

Да. См. [This] (docs.oracle.com/javase/7/docs/api/java/lang/Comparable.html). Он говорит 'Comparable ' и в сводке метода он говорит 'compareTo (T o)'. Наблюдайте, что они одинаковы. – SMA

1

Я думаю, что тип аргумента CompareTo ошибочна, она должна быть

public int compareTo(Flight other){ 
0

compareTo метод в классе не к действительному переопределение, потому что вы определили, что ваш класс реализации Comparable<Flight> Поэтому для того, чтобы переопределить этот метод в вашем классе вы должны изменить переменную типа другого из KeyFlight в Flight.

@Override 
public int compareTo(Flight o) { 
    //your logic here 
} 
Смежные вопросы