2016-09-24 4 views
0

때 Comparable 인터페이스를 구현하고 compareTo 메소드를 오버라이드 (override), compareTo 메서드를 사용하여 compareTo를 재정의 할 때?

@Override 
public int compareTo(Name o) { 
    int val = this.name.compareTo(o.name); 
    if (val != 0) { 
     return val; 
    }   
    if (count != o.count) { 
     return count - o.count; 
    } 
} 

세 번째 라인

, 나는 내가 그것을 무시하면 내가은 compareTo를 사용할 수있는 실현하고, 자동 일들이 자연의 질서를 다음과 비교합니다. 그러나 comparable 인터페이스의 추상 메소드와 비교되지 않습니다. 그것을 정의하지 않고, 그것은 여전히 ​​비교합니까? 또한이 compareTo를 구별하기 위해 super 키워드를 사용할 필요가없는 이유는 무엇입니까?

답변

1

class Name extends Comparable<Name>compareTo 메서드를 구현하고 있습니다. 이 클래스에는 name이라는 멤버가 있습니다. 세 번째 줄에 Name.compareTo을 호출했다면 무한대 재귀로부터 충돌이 발생하고 Comparable.compareTo을 호출 할 수 없으며 실제로는 추상입니다.

X.compareTo을 호출합니다. 여기서 X는 멤버 변수 name을 (를) 선언 한 유형입니다.

즉, nameinstanceof Name이 아닌 경우에만 작동합니다.

그런데 마지막 if 블록에 return 문과 함께 else 분기를 추가해야합니다. 그렇지 않으면이 스 니펫이 컴파일되지 않습니다.

관련 문제