2015-10-08 47 views
1

我有一個看起來像這樣既有狗和貓類:覆蓋自定義Java類中的compareTo()方法?

public class Dog implements Speakable 
{ 
private String name; 

public Dog(String name) 
{ 
    this.name = name; 
} 

public void speak() 
{ 
    System.out.println("Woof! Woof!"); 
} 

public String toString() 
{ 
    return "Dog: " + name; 
} 

} 

這些類都實現我創建了一個叫做口述的接口看起來像這樣:

public interface Speakable 
{ 
    public void speak(); 
} 

這口述存在界面因爲我需要一個引用變量,它允許我將Dogs和Cats添加到同一個ArrayList中,並且仍然對它們調用speak()方法。

我還需要重寫Comparable接口的compareTo()方法,以便比較狗的名稱。當調用這個方法時,我認爲我的代碼如下所示:a.compareTo(b)。如果a大於b,我希望這個新方法返回-1,如果a小於b,則返回1,如果相等,則返回0。

我想我需要的狗類具體實現除口述可比,所以我寫的可比界面是這樣的:

public interface Comparable<Dog> 
{ 
    public int compareTo(Object obj); 
} 

如何覆蓋的compareTo()方法,以滿足需要我以上所列?我知道我需要幾個if語句,但是我不能想到在不調用新的compareTo()方法中的compareTo()方法的情況下編寫此語句的方法。這是合法的嗎?比較接口的compareTo()方法不應該包含這些決定嗎?

+0

「我怎麼覆蓋的compareTo()方法,以滿足我上面列出的需要」 - 什麼是您的需求。我可以看到,你只想比較名字 – Rehman

+0

你是什麼意思由'a大於b,a小於b'?你如何比較'狗'? – TDG

+1

您正在嘗試分類清單?或者列表? –

回答

3

刪除您的自定義Comparable,並使用Java Comparable<T>。您可以修改SpeakableextendComparable。喜歡的東西,

public interface Speakable extends Comparable<Speakable> 

然後每Speakable也是Comparable<Speakable>

+0

當我這樣做時,我得到一個錯誤,說狗不抽象,並且不重寫抽象方法compareTo(朗讀) – JoeSchmuck

+0

你必須重寫'compareTo(Speakable)'。如果你想能夠比較'貓'和'狗'。 –

1

使用Java的可比接口。 Somenthing這樣的:

public class Dog implements Speakable, Comparable<Dog>{ 
    @Override 
    public int compareTo(Dog o) { 
     return this.name.compareTo(o.name); 
    } 

}

+0

錯誤:當我像這樣寫入時找不到變量名稱。 – JoeSchmuck