2015-10-08 27 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