2014-12-16 5 views
-1

문제점이 있습니다. 다른 클래스를 확장하고 Comparable을 구현하는 클래스가 있습니다. 그러나 내 프로그램을 컴파일 할 때이 오류가 발생했습니다 : Flight 추상 있지 않고 추상 메서드 compareTo 재정의하지 않습니다. 어쨌든 Flight 코드는 다음과 같습니다.비교 가능 및 비교 가능

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

해야 compareTo와의 인수의 형식이 잘못 생각 비행 자체보다는. compareTo에 정의한 매개 변수의 유형은 비교할 implements 절에서 지정한 유형과 일치해야합니다.

입니다, 당신의 생성자에서 당신이 KeyFlight 다시 정의하는 코드의 또 다른 문제는 그렇지

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

당신이 미래에 NullPointerException이 얻을 수 있어야합니다. 출발 불린에도 똑같이 적용됩니다.

자바 부울의 기본 설정은 부울로 초기화되어 있으므로 생성자에서 명시 적으로 말할 필요가 없습니다. 당신이 당신의 클래스를 사용하면 FlightKeyFlight에서 다른 변수 유형을 변경해야하는 클래스에서이 메소드를 오버라이드 (override)하기 위해 그래서 Comparable<Flight>를 구현하는 것이 정의하기 때문에

+0

따라서 클래스를 구현할 때 Comparable을 구현해야합니다. 비교 대상은 무엇입니까? 그리고 그것을 성공적으로 컴파일 해 주셔서 감사합니다! – userNo2209

+0

예. [this] (docs.oracle.com/javase/7/docs/api/java/lang/Comparable.html)을 참조하십시오. 이것은 'Comparable '이고 메소드 요약에는 compareTo (T o)가 표시됩니다. 거기에서 그들이 똑같은지 관찰하십시오. – SMA

1

나는 두 keyflights을 비교하려는 당신이

implements Comparable<KeyFlight> 

대신

implements Comparable<Flight> 

사용해야합니다, 그것은

public int compareTo(Flight other){ 
0

클래스의 compareTo 방법은 유효한 재정으로하지 않습니다.

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