我一直在搜索,最接近的回答(不是答案)是here,但我對這個迴應感到困惑。我想用Collection.sort()來排序一些狗的名字,所以我需要學習使用Comparable接口。我的問題:爲什麼在重寫compareTo()方法時使用Comparable接口的compareTo()?
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;
}
}
你所說的「使用」的意思是,你如何可以覆蓋的方法,而不必一個方法重寫?它在哪裏說它是一個「默認」方法?不清楚你在問什麼。 – EJP
@EJP,當他們談論創建他們自己的Comparable接口的compareTo方法時,這裏有一些使用單詞「override」的文章。 https://www.tutorialspoint.com/java/java_using_comparator.htm –
@EJP,此外,一個接口可以有一個默認方法,自Java 8以來已經在一個接口中實現。由於我發現的很多文章都說「覆蓋」compareTo( )當他們實現了Comparable接口並且他們調用了compareTo()這個默認方法時,我問我在文章中compareTo()是否是一個默認方法。 –