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
上面的注释部分怎么理解啊?

解决方案 »

  1.   

    你要看具体的equals方法啊
      

  2.   

    d.equals(b)肯定是永假的
    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类的实例对象