当实现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。
答案 0 :(得分:1)
您正在compareTo
中实施方法class Name extends Comparable<Name>
。这个类有一个名为name
的成员。如果你在第三行调用Name.compareTo
,你会因无限递归而崩溃,也不能调用Comparable.compareTo
,这确实是抽象的。
您正在调用X.compareTo
,其中X是您使用成员变量name
声明的类型。
换句话说,只有在name
不是instanceof Name
时才会有效。
顺便说一下,你需要在你的最后一个if块中添加一个带有return语句的else分支,否则这个代码片段不会编译。