[英]Overriding an equals method from the java…Object class
我一直在试图找出这个问题背后的原因,并且一直在努力寻找结果为何。 我将解释我所理解的一切,希望有人能够为我填补空白。
想象一下,您有一堂课:
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的方法签名不应该允许去那里的调用吗?
如果有人可以向我解释,那就太好了!
op
是Object
类型的变量,它没有具有签名public boolean equals(Point p)
。 因此,可以通过调用op.equals()
(无论参数类型如何op.equals()
执行的唯一equals
方法具有签名的boolean equals (Object o)
。 您的Point
类将覆盖boolean equals (Object o)
,因此在后三种情况下都将调用方法1。
鉴于
Point p = new Point(3,4)
Object op = new Point(3,4)
由于op
是一个Object
op.equals(p)
将调用equals(Object o)
方法,因为那是Object
拥有的唯一equals
方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.