私はこの質問の背後にある理論的根拠を理解しようとしてきましたが、なぜ結果がそれなのかを知るために苦労しています。私は理解していることすべてを説明し、誰かが私のために空白を埋めることができることを願っています。javaクラスからequalsメソッドをオーバーライドします。オブジェクトクラス
p.equals(o) // this calls method 1
p.equals(p) // this calls method 2
p.equals(op) // this calls method 1
しかし、これは私が混乱してしまうところです:
Object o = new Object()
Point p = new Point(3,4)
Object op = new Point(3,4)
我々は呼び出す場合:
public class Point {
public boolean equals(Object o) {
if (o == null || (!(o instanceof Point)) { // Let's call this method 1
return false;
}
Point other = (Point) o;
return x == other.x && y == other.y;
}
public boolean equals(Point p) { // Let's call this method 2
if (p == null) {
return false;
}
return x == p.x && y == p.y;
}
}
は、今、私たちは次のオブジェクトを作成します。
することで、クラスを持っている想像してみて。
op.equals(o) // this calls method 1
op.equals(op) // this calls method 1
op.equals(p) // this calls method 1
なぜ最後の呼び出し方法が1ですか?メソッド2のメソッドシグネチャは、コールがそこに行くことを保証するべきではありませんか?
誰かが私にそれを説明することができたら、それは素晴らしいだろう!
'Object.equals(Object)'の署名をオーバーライドすることはできません。 –