Я пытался выяснить обоснование этого вопроса, и я изо всех сил пытался понять, почему результат такой, какой он есть. Я объясню все, что я понимаю, и надеюсь, что кто-то сможет заполнить пробелы для меня.Переопределение метода equals из java ... Класс объекта
Представьте, что вы есть класс:
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;
}
}
Теперь мы создаем следующие объекты:
Object o = new Object()
Point p = new Point(3,4)
Object op = new Point(3,4)
Если мы называем:
p.equals(o) // this calls method 1
p.equals(p) // this calls method 2
p.equals(op) // this calls method 1
Однако, это где я запутаться ,
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)'. –