可比接口的问题覆盖方法

时间:2018-09-25 11:31:22

标签: java abstract-class comparable

我有一个名为Individuo的抽象类,它实现了Comparable<Individuo>接口。 但是,当我尝试覆盖子类中的方法时,它将实现以下方法:

@Override
public int compareTo(Object o) {
    return 0;
}

是否应实施以下内容?

@Override
public int compareTo(Individuo o) {
    return 0;
}

这是声明

个人:

public abstract class Individuo<I extends Individuo> implements Cloneable, Comparable<Individuo>

Individuo_MultiOOP(子级):

public class Individuo_MultiOOP extends Individuo implements Cloneable

4 个答案:

答案 0 :(得分:1)

编辑2(问题更新后)

由于Individuo是用通用类型声明的,因此请使用  Comparable<Individuo<I>>
代替 Comparable<Individuo>  在声明中。

原始答案
首先使用实现声明保存类而不覆盖compareTo()-

public class IndividuoChild extends Individuo {
...
}

然后从编译器错误注释中找到[可以在eclipse,intellij等IDE中找到],选择“添加未实现的方法” ,它将生成预期的compareTo()为-

@Override
public int compareTo(Individuo o) {
    // TODO Auto-generated method stub
    return 0;
}

答案 1 :(得分:0)

否,您应该使用相同的参数覆盖。它将更具可读性并且易于理解。

class Individuo implements Comparable<Individuo>{
    @Override
    public int compareTo(Individuo o) {
        return 0;
    }
}

儿童班

public class Child extends Individuo{
    @Override
    public int compareTo(Individuo o) {
        // TODO Auto-generated method stub
        return 0;
    }
}

如果使用对象,则设计可能会出现问题。

答案 2 :(得分:0)

子级很可能扩展了Individuo的原始版本,该版本通过一些参数得以概括。

在这种情况下,子级中的compareTo(Object o)将编译:

abstract class Individuo<T> implements Comparable<Individuo<T>> {}

class Child extends Individuo {
    @Override
    public int compareTo(Object o) {
        return 0;
    }
}

确保子级使用提供的所有通用参数扩展正确的Individuo

class Child extends Individuo<Child> {
    @Override
    public int compareTo(Object o) { // this shouldn't compile
        return 0;
    }
}

答案 3 :(得分:0)

@Override
public int compareTo(Individuo o) {
    return 0;
}

如果指定了泛型类型,则这是需要重写的方法。我的意思是您的班级签名是:

  

公共类Individuo实现了Comparable

但是如果您未指定可比较接口的通用类型,则可以覆盖 public int compareTo(Object o)方法。我的意思是,如果您的课程签名是:

  

公共类Individuo实现Comparable

让我知道您的问题是否已解决