【发布时间】:2016-11-18 03:34:09
【问题描述】:
我一直在谷歌搜索,最接近的回复(未回答)是here,但我对回复感到困惑。我正在尝试使用 Collection.sort() 对一些狗的名字进行排序,所以我需要学习使用 Comparable 接口。我的问题:
1) 当我“覆盖” compareTo() 时,为什么需要使用来自接口的 compareTo()?
2) 如果 Comparable 接口中的 compareTo() 是默认方法,为什么在方法前面没有“default”关键字? Java SE 8 Menu
这里是部分代码:
Collections.sort(list);
for(Dog a: list) // printing the sorted list of names
System.out.print(a.getDogName() + ", ");
这是实现 Comparable 接口的类:
class Dog implements Comparator<Dog>, Comparable<Dog> {
private String name;
private int age;
Dog() {}
Dog(String n, int a) {
name = n; age = a;
}
public String getDogName() {
return name;
}
public int getDogAge() {
return age;
}
public int compareTo(Dog d) {
return (this.name).compareTo(d.name); //###.....my question
}
// Override Comparator Interface's compare() to sort "ages"
public int compare(Dog d, Dog d1) {
return d.age - d1.age;
}
}
【问题讨论】:
-
你所说的“使用”是什么意思,如何在没有方法覆盖的情况下覆盖方法?它在哪里说这是一个
default方法?不清楚你在问什么。 -
@EJP ,当他们谈论创建自己的 Comparable 接口的 compareTo 方法时,这是在线使用“覆盖”一词的一堆文章中的一个示例。 tutorialspoint.com/java/java_using_comparator.htm
-
@EJP,另外,一个接口可以有一个自 Java 8 以来已经在接口中实现的默认方法。因为我发现的许多文章在实现 Comparable 接口时都说“覆盖” compareTo() 并且它们将 compareTo() 称为默认方法,我在帖子中询问 compareTo() 是否是默认方法。
-
你没有在你的问题中问这个问题。您问 为什么 它没有
default如果 它是默认方法。这个问题没有意义。它只是一个默认方法if,它的声明中有default。你似乎不明白自己的问题。 -
@EJP ,我看你不明白我的问题。大声笑
标签: java interface comparable