繁体   English   中英

从java…Object类重写equals方法

[英]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的方法签名不应该允许去那里的调用吗?

如果有人可以向我解释,那就太好了!

opObject类型的变量,它没有具有签名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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM