A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

就是老毕视频里那个关于Object-equals的例子,源代码差不多是:
class Num
{
        private int num;
        Num(int num)
        {
                this.num=num;
        }
        public boolean equals(Object obj)
        {
                if (!(obj instanceof Num))
                        return false;
                        Num n=(Num)obj;
                        return this.num==n.num;
        }
}

class  objectset
{
        public static void main(String[] args)
        {
                Num n1=new Num(7);
                System.out.println(n1.equals(8));
        }
}
然后,我想问下,有没有什么方法,把equals这个功能从Num类中独立出来建立一个新类,用新类来调用这个功能,继续与Num类中的数值进行比较……

评分

参与人数 1黑马币 +9 收起 理由
Rancho_Gump + 9

查看全部评分

6 个回复

正序浏览
朱玉玺 发表于 2013-2-14 22:23
当然可以这样做,但又个问题,因为基础的关系,就算你另外定义了一个工具类,里边封装了equals方法,只是要 ...

也是……我其实就想分析清楚,什么时候方法该独立成一个类,什么时候方法该跟类紧密结合才合适,听同学你的建议,略微懂了一些。
回复 使用道具 举报
刘渝灵 发表于 2013-2-14 21:42
我能说 class  objectset  这个不符合java标示符的规范吗   O T应该大写,test还拼错了 ...

呃……抱歉,光顾着发帖,没考虑到修改细节问题了……
回复 使用道具 举报
当然可以这样做,但又个问题,因为基础的关系,就算你另外定义了一个工具类,里边封装了equals方法,只是要用到两个个参数了,而且由于num是私有的,那还必须先为Test类添加get方法,在工具类中做比较。如果equals里边两个参数都是Object类型的,那么你要先判断是否为Test类型,然后再强转,再调用get方法获取Test的num做比较;如果equals是参数都变成Test那么它就只能为Test这个类服务。这样好麻烦,其实视频里将的方法基本上都是最优的设计选择。父类已有的功能,为啥还要重新定义并做个新类呢?从设计的角度看,这无疑是个bad idea~
回复 使用道具 举报
我能说 class  objectset  这个不符合java标示符的规范吗   O T应该大写,test还拼错了
回复 使用道具 举报
你的意思是要把这个方法抽取出来吗,抽取出来也可以嘛,不过传递给这个方法的参数就必须是两个了,比如》public boolean equals(Object obj1,Object obj2)
{}
但是这样的话这个方法的内部的代码就不好写了,毕竟你不知道传入的到底是什么对象
回复 使用道具 举报
嗯……如果不用内部类方法的话,能做到么
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马