我對我的Java相當生疏,我有一個很難用下面的: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
}
}
所以,我明白了爲什麼哺乳動物的specificCompare沒有被調用(不正確的類型),但我試圖找出一個乾淨的方式來完成這項工作。我希望能夠擴展Animal並在需要時正確調用特定比較。
除了實際的答案,如果有人曾建議文檔,我在這讀書,我會很高興有一個鏈接到它。
你希望每個班'Animal'來定義自己的'specificCompare()',對吧?你當前的代碼不起作用?你不想要的是什麼? – acdcjunior 2013-05-12 22:11:15
重寫specificCompare(Animal a)而不是重新定義它。它在超級類中是私人的,使它受到保護。 – 2013-05-12 22:12:09
@acdcjunior:它總是返回0而不是調用Mammal specificCompare。 – useSticks 2013-05-12 22:15:28