Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 可比较接口的问题重写方法_Java_Abstract Class_Comparable - Fatal编程技术网

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

但是,如果没有指定可比较接口的泛型类型,可以重写public int compareTo(Object o)方法。我的意思是,如果你的班级签名是:

可比较的公共类


如果您的问题得到解决,请告诉我,兄弟

出示班级声明!如果您只是将参数的类型从
Object
更改为
Individuo
,会发生什么情况?仅
int compareTo(Object)
重写
int compareTo(Object)
其中as
int 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;
}