在覆盖compareTo时使用compareTo方法?

时间:2016-09-24 21:06:08

标签: java interface compareto

当实现Comparable接口并覆盖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,它会自动按照自然顺序比较事物。但不是比较在可比较的界面中的抽象方法。没有定义它,它仍然可以比较?另外,为什么我不需要使用super关键字来区分这个compareTo。

1 个答案:

答案 0 :(得分:1)

您正在compareTo中实施方法class Name extends Comparable<Name>。这个类有一个名为name的成员。如果你在第三行调用Name.compareTo,你会因无限递归而崩溃,也不能调用Comparable.compareTo,这确实是抽象的。

您正在调用X.compareTo,其中X是您使用成员变量name声明的类型。

换句话说,只有在name不是instanceof Name时才会有效。

顺便说一下,你需要在你的最后一个if块中添加一个带有return语句的else分支,否则这个代码片段不会编译。