当前位置: 首页 > 知识库问答 >
问题:

在自定义Java类中重写compareTo()方法?

呼延智明
2023-03-14

我有一门狗和猫的课,看起来像这样:

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;
}

}

这些类都实现了我创建的一个名为Speakable的接口,它看起来像这样:

public interface Speakable
{
  public void speak();
}

这个Speakable接口之所以存在,是因为我需要一个引用变量,允许我将狗和猫添加到同一个ArrayList中,并且仍然在它们上调用说话()方法。

我还需要重写Comparable接口的compareTo()方法,以便比较狗的名字。调用此方法时,我认为我的代码如下所示:a.compareTo(b)。我希望这个新方法返回-1,如果a大于b,如果a小于b,返回1,如果它们相等,返回0。

我认为我需要狗类来具体实现可比除了Speakable所以可比的接口我写的是:

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

如何重写compareTo()方法以满足上面列出的需求?我知道我需要几个if语句,但是如果不在新的compareTo()方法中调用compareTo()方法,我想不出一种编写方法。这合法吗?comparable接口中的compareTo()方法不应该已经包含这些决策吗?

共有2个答案

沈乐邦
2023-03-14

在Dog类中使用Java可比接口。诸如此类:

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

}

班昱
2023-03-14

删除自定义Comparable,然后使用JavaComparable

public interface Speakable extends Comparable<Speakable>

那么每一个可讲的也是一个可比的

 类似资料:
  • 当实现Comparable接口并重写compareTo方法时, 第三行,我意识到当我重写它时,我可以使用compareTo,它会自动按照自然顺序进行比较。但是在可比较的界面中,它不是一个抽象的方法。没有定义它,它还可以比较吗?还有,为什么我不需要使用super关键字来区分这个比较。

  • 我正在学习自定义序列化,但我不明白如何超越writeObject()和readObject()这两个方法,因为我知道这两个方法是final,并且我知道final方法不能被重写。 来自ObjectOutputStream的WriteObject()方法: writeObject()需要像下面这样重写: 我知道新的WriteObject()方法是私有的,但它被称为使用反射Java序列化机制。但是我不明

  • 首先,很抱歉提出这样的问题,我对java非常陌生。我知道java Comparable Interface只有一个methode,它有一个int返回类型。然而,当我想要覆盖compareTo方法时,我不确定我到底在做什么。对我来说,理解编程很重要,而不仅仅是记住它。例如,在下面的代码中,我们有一个int变量“spaceshipClassComparison”,它等于“this.spaceshipC

  • 来自java教程 > 与实例的超类相同的包中的子类可以覆盖任何未声明为私有或最终的超类方法。 不同包中的子类只能重写声明为public或protected的非final方法。 但有什么区别?如果一个方法没有声明为private,那么它必须是public还是protected no?