Java 可比较接口的问题重写方法
我有一个名为Java 可比较接口的问题重写方法,java,abstract-class,comparable,Java,Abstract Class,Comparable,我有一个名为Individuo的抽象类,它实现了Comparable接口。 但是,当我尝试重写子类中的方法时,它实现了以下方法: @Override public int compareTo(Object o) { return 0; } 它不应该实现以下功能吗 @Override public int compareTo(Individuo o) { return 0; } 这是声明 个人: public abstract class Individuo<I exte
Individuo
的抽象类,它实现了Comparable
接口。
但是,当我尝试重写子类中的方法时,它实现了以下方法:
@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>
编辑2(问题更新后)由于Individuo是用泛型类型声明的,所以请使用
可比性
而不是
可比性
在声明中。
原始答案
首先使用实现声明保存类,而不重写
compareTo()
-
然后从编译器错误注释[可以在eclipse、intellij等IDE中找到],选择“添加未实现的方法”,这将生成预期的compareTo()
as-
@Override
public int compareTo(Individuo o) {
// TODO Auto-generated method stub
return 0;
}
不,应该使用相同的参数重写。它将更易于阅读和理解
class Individuo implements Comparable<Individuo>{
@Override
public int compareTo(Individuo o) {
return 0;
}
}
如果使用对象,设计可能会有问题 孩子们很可能扩展了一个原始版本的
individualduo
,该版本由一些参数概括
在这种情况下,子对象中的compareTo(对象o)
将编译:
abstract class Individuo<T> implements Comparable<Individuo<T>> {}
class Child extends Individuo {
@Override
public int compareTo(Object o) {
return 0;
}
}
如果指定了泛型类型,则需要重写此方法。我的意思是当你的班级签名是:
公共类IndividDuo实现了Compariable如果您的问题得到解决,请告诉我,兄弟出示班级声明!如果您只是将参数的类型从
Object
更改为Individuo
,会发生什么情况?仅int compareTo(Object)
重写int compareTo(Object)
其中asint compareTo(Individuo)
重载此方法。非常推测,不是吗?您不知道Individuo
有泛型类型参数,如果没有,您的答案就没有帮助。@Michael,这是我的幸运猜测:)如果该类没有任何泛型参数,我将删除它。您自己也犯了同样的错误。它应该是抽象类{}
——否则您将保留原始类型警告(也在您的第二个版本的Child
)我这样做了。没用。仍然使用对象作为替代parameter@LuisValdez不知道个体是广义的类;这件事在早些时候是没有问题的。但它不允许我用Individuo覆盖,因为参数太奇怪了。我刚刚在eclipse中检查了代码,它没有显示任何编译器错误。
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;
}
}
abstract class Individuo<T> implements Comparable<Individuo<T>> {}
class Child extends Individuo {
@Override
public int compareTo(Object o) {
return 0;
}
}
class Child extends Individuo<Child> {
@Override
public int compareTo(Object o) { // this shouldn't compile
return 0;
}
}
@Override
public int compareTo(Individuo o) {
return 0;
}