我有一个名为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
答案 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
让我知道您的问题是否已解决