我对Java感到非常生锈,并且在以下方面遇到了困难:

public abstract class Animal implements Comparable<Animal> {

    //enum stored elsewhere
    AnimalType type = null;

    private specificCompare(Animal a){
        return 0;
    }

    @Override
    public int compareTo(Animal a){
        int comp = type.compareTo(a.type);
        if (comp > 0) {
            return 1;
        } else if (comp < 0) {
            return -1;
        } else {
            return specificCompare(a);
        }
    }
}

public class Mammal extends Animal {
    private mammalStuff;

    public Mammal(){
        ...
    }

    public specificCompare(Mammal m){
       //do specific comparison
    }
}


因此,我知道为什么不调用Mammal的specificCompare(错误类型),但是我试图找出一种干净的方法来完成这项工作。我希望能够扩展Animal并在需要时让它正确调用特定的比较。

除了实际答案外,如果有人建议我阅读相关文档,我很乐意提供指向该文档的链接。

最佳答案

重写父函数,然后将Animal参数强制转换为Mammal或任何特定的子类。

public class Mammal extends Animal {
    private mammalStuff;

    public Mammal(){
        ...
    }

    public int specificCompare(Animal a){
       Mammal m = (Mammal)a;
       //do specific comparison
    }


当您知道两个对象是同一类型时,您仅在调用specificCompare(请参见:Animal.compareTo),这样就不会失败。

10-08 18:00