class Base
{
public boolean equals(Object obj)
{
if (obj instanceof Base)
//...
}
}class Derived extends Base
{
public boolean equals(Object obj)
{
if (obj != null && getClass() == obj.getClass() &&
super.equals(obj))
//...
}
}Base b = new Base();
Derived d = new Derived();
if (d.equals(b)) //Always false
if (b.equals(d)) //Potentially true
上面的注释部分怎么理解啊?
{
public boolean equals(Object obj)
{
if (obj instanceof Base)
//...
}
}class Derived extends Base
{
public boolean equals(Object obj)
{
if (obj != null && getClass() == obj.getClass() &&
super.equals(obj))
//...
}
}Base b = new Base();
Derived d = new Derived();
if (d.equals(b)) //Always false
if (b.equals(d)) //Potentially true
上面的注释部分怎么理解啊?
d是一个Derived的对象,继承自Base类并重写了equals方法,
所以d.equals();调用的事Derived自己的equals方法;
在这个方法中getClass() == obj.getClass()对于obj为b来说是永假的
因为b,d两个引用所指向的内存空间是肯定不一样的。
所以d.equals(b)永假b.equals(d)肯定是永真的
b是Base的对象,d.equals调用Base类的equals方法。
该方法中只有obj instanceof Base对于obj位d来说是永真的
因为d是Derived的对象,Derived继承自Base类,所以d也是Base类的实例对象