我正在重讀Stuart Reges的“建構
Java程式”,并注意到一些我不太了解的内容.它關于在任何新類中重載equals()方法.讓我們說我們定義一個類:
public Point{
private int x;
private int y;
public Point(int x, int y){
this.x = x;
this.y = y;
}
public getX(){
return this.x;
}
public getY(){
return this.y;
}
}
本書建議,每當我們定義一個新類時,我們為新類定義的equals()方法應該這樣寫:
public boolean equals(Object o) {
if (o instanceof Point) {
Point other = (Point) o;
return x == other.x && y == other.y;
} else {
return false;
}
}
為什麼equals方法應該接受泛型類型“Object”而不是“Point”類型的對象?該書說如果equals方法頭與通用Object類的equals方法頭不比對,它将不會被重載(并且我得到它不會被重載,否則).然而,這有點不直覺,因為它們實際上相等的唯一時間是同一類型……
當我将一個String對象作為參數傳遞給我的equals()方法時,該方法接受Point類型的參數而不是String,它正确地傳回false.每當我們傳遞不同類型時,通用的equals()方法(比較記憶體位址)是否适合賬單?