引起你提出這個問題困惑的最有名的例子包括equals
:
public class Banana {
private final double weight;
public boolean equals(Banana that) { return this.weight == that.weight; }
}
很多人認爲這是一個有效超越equals
,但它實際上只是另一種與Object#equals(Object)
無關的方法,不會涉及等於比較。
這是Java的類型系統的已知缺陷之一,所以照顧好得到它的權利。
進一步混淆的問題,您是允許專門的返回類型(返回類型是協變):
public abstract class FruitTree {
public abstract Object getFruit();
}
public class BananaTree {
...
@Override public Banana getFruit() { return this.bananas.iterator().next(); }
}
注意方法簽名的概念不包括返回類型。方法簽名是靜態(編譯時)方法解析機制中的關鍵概念,每個簽名都是動態方法調度的獨立點。
的Java 6起,有一個覆蓋註釋,使鏈接明確。如果你把(AT)覆蓋的子類它會說,它並沒有覆蓋.. – 2013-05-13 09:36:54