爲了從概念上理解繼承,接口&多態,我創建了幾個類來測試事情。我得到的結果不是我期望的結果。代碼如下:Java接口與繼承和多態
public class Animal implements Comparable{
//Animal constructor & methods
public int compareTo(Object arg0){System.out.println("Animal.compareTo");}
}
public class Bear extends Animal{
//Bear constructor & methods
}
public class PolarBear extends Bear implements Comparable{
//PolarBear constructor & methods
public int compareTo(Object arg0) {System.out.println("PolarBear.compareTo");
我沒有得到任何錯誤,說我不能再次實現Comparable。但在我的測試中,一旦創建PolarBear,即使PolarBear應該繼承Animal的compareTo,我也無法回到Animal的compareTo方法。我測試了以下:
Animal bobo = new PolarBear();
bobo.compareTo(null);
((PolarBear) bobo).compareTo(null);
((Animal)bobo).compareTo(null);
((Comparable) bobo).compareTo(null);
而且他們每個人的印刷:
PolarBear.compareTo
有什麼辦法來訪問Animal
的compareTo
?從邏輯上講,我不希望能夠比較PolarBear
以及PolarBear
質量的動物質量嗎?
您可以隨時從子類中調用'super.compareTo()'。 – assylias
這些方法是動態綁定到實例的。 'bobo'是一個'PolarBear',因此總是調用'PolarBear'的'compareTo(...)'方法。爲什麼你想要別的東西被稱爲? – MrSmith42
順便說一下,應該是'implements Comparable' –
fge