免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 10922 | 回复: 1
打印 上一主题 下一主题

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

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-08-23 18:55 |只看该作者 |倒序浏览
最近在学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) );
}
}

论坛徽章:
0
2 [报告]
发表于 2013-08-28 10:33 |只看该作者
首先我要说的是这个equals写得并不好,应该先判断是否引用的同一个对象。其次就是传入的对象是什么类型其实是没谱的,因为多态的存在你无法确认传入的对象是什么类型,所以必须写明是Object。你传入的对象也许是和对象本身一个类,也许只是实现了相同的接口。内部如何处理完全要看你自己认为如何才算相等,在此之前就设下限制是不合理的。唯一的限制就是这个比较对象也是一个对象。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP