有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

可比接口中的java问题重写方法

我有一个名为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>

个性化多线程(儿童):

public class Individuo_MultiOOP extends Individuo implements Cloneable

共 (2) 个答案

  1. # 1 楼答案

    不,你应该用相同的参数覆盖。它将更易于阅读和理解

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

    如果使用Object,设计可能会有问题

  2. # 2 楼答案

    孩子们很可能扩展了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;
        }
    }