黑马程序员技术交流社区

标题: 视频里的一个例子,里面类的属性和功能可以分开写吗? [打印本页]

作者: 刘亦茜    时间: 2013-2-14 16:05
标题: 视频里的一个例子,里面类的属性和功能可以分开写吗?
就是老毕视频里那个关于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类中的数值进行比较……
作者: 刘亦茜    时间: 2013-2-14 16:10
嗯……如果不用内部类方法的话,能做到么
作者: 杨玲    时间: 2013-2-14 18:52
你的意思是要把这个方法抽取出来吗,抽取出来也可以嘛,不过传递给这个方法的参数就必须是两个了,比如》public boolean equals(Object obj1,Object obj2)
{}
但是这样的话这个方法的内部的代码就不好写了,毕竟你不知道传入的到底是什么对象
作者: 刘渝灵    时间: 2013-2-14 21:42
我能说 class  objectset  这个不符合java标示符的规范吗   O T应该大写,test还拼错了
作者: 朱玉玺    时间: 2013-2-14 22:23
当然可以这样做,但又个问题,因为基础的关系,就算你另外定义了一个工具类,里边封装了equals方法,只是要用到两个个参数了,而且由于num是私有的,那还必须先为Test类添加get方法,在工具类中做比较。如果equals里边两个参数都是Object类型的,那么你要先判断是否为Test类型,然后再强转,再调用get方法获取Test的num做比较;如果equals是参数都变成Test那么它就只能为Test这个类服务。这样好麻烦,其实视频里将的方法基本上都是最优的设计选择。父类已有的功能,为啥还要重新定义并做个新类呢?从设计的角度看,这无疑是个bad idea~
作者: 刘亦茜    时间: 2013-2-15 13:16
刘渝灵 发表于 2013-2-14 21:42
我能说 class  objectset  这个不符合java标示符的规范吗   O T应该大写,test还拼错了 ...

呃……抱歉,光顾着发帖,没考虑到修改细节问题了……
作者: 刘亦茜    时间: 2013-2-15 13:18
朱玉玺 发表于 2013-2-14 22:23
当然可以这样做,但又个问题,因为基础的关系,就算你另外定义了一个工具类,里边封装了equals方法,只是要 ...

也是……我其实就想分析清楚,什么时候方法该独立成一个类,什么时候方法该跟类紧密结合才合适,听同学你的建议,略微懂了一些。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2