我对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),这样就不会失败。