技术小菜鸟 发表于 2013-08-23 18:55

刚看到一个重写equals方法的代码,有几个问题想请教一下大家

最近在学Object类中的equals方法,看到一个重写equals方法的代码,有几个问题想请教一下大家:
一、为什么equals中的形参一定要用Object这个基类型,是不是为了重写Object类中的equals方法?还有没有其他原因(多态方面的)?
二、我可不可以把形参换成自己定义的,即自己重新定义一个方法来实现判断aa1与aa2是否相等的功能,而不用Object类中的equals方法?
三、代码中红色处有强制转换 A aa = (A) obj ,为什么在其之前没有表明已经将父类指向子类对象的语句如(obj = aa)?
代码如下:

class A
{
    Public int i;

    Public A(int i)
    {
      this.i = i;
    }

   Public boolean equals (Object obj)
   {
      A aa = (A) obj;
      if (this.i == aa.i)
            return true;
      else
            return false;
   }
}

Public class Testequals
{
   Public static void main (String[] args)
{
      A aa1 = new A(2);
      A aa2 = new A(2);
      System.out.printf( aa1.equals(aa2) );
}
}

wlmouse 发表于 2013-08-28 10:33

首先我要说的是这个equals写得并不好,应该先判断是否引用的同一个对象。其次就是传入的对象是什么类型其实是没谱的,因为多态的存在你无法确认传入的对象是什么类型,所以必须写明是Object。你传入的对象也许是和对象本身一个类,也许只是实现了相同的接口。内部如何处理完全要看你自己认为如何才算相等,在此之前就设下限制是不合理的。唯一的限制就是这个比较对象也是一个对象。
页: [1]
查看完整版本: 刚看到一个重写equals方法的代码,有几个问题想请教一下大家