黑马程序员技术交流社区

标题: 复写equals的问题 [打印本页]

作者: 蒋昌宏    时间: 2012-3-3 20:02
标题: 复写equals的问题
/**
1、创立一个类,指向这个类创建两个对象
2、自定义equals方法,比较这两个类的值是否相等。
3、使用object超类
*/




class Fu
{
        int num ;
       
        void setNum(int num)
        {
                this.num = num;
                }
        void print()
        {
                System.out.println("num="+num);
                }
        }
       
class Zi
{
        int num ;
       
        void setNum(int num)
        {
                this.num = num;
                }
        void print()
        {
                System.out.println("num="+num);
                }
        }
       
class select
{
        public static Object function(Object obj)
        {
                        if(obj instanceof Fu)
                        {
                                Fu x = (Fu)obj;
                                return x;
                                }
                        else if(obj instanceof Zi)
                        {
                                Zi x = (Zi)obj;
                                return x;
                                }
                        else{
      
                                return -1;
             }
                }
        }
       
class function
{
                public static boolean equals(Object obj,Object obj1)
        {
                        select.function(obj);
                        select.function(obj1);
                        return obj.num == obj1.num;
                        }               
                }

class ObjectDemo
{
        public static void main(String args[])
        {
                Fu f1 = new Fu();
                Zi f2 = new Zi();
                f1.setNum(8);
                f2.setNum(8);
                System.out.println(function.equals(f1,f2));
                }
        }

编译报错,说return obj.num == obj1.num;有问题
作者: 王国华    时间: 2012-3-3 20:21
本帖最后由 王国华 于 2012-3-3 20:27 编辑

obj 和obj1 都是Object类 没有num属性 需要强制转换类型吧 你试试。
select.function(obj);
select.function(obj1);
这两句运行完obj 和obj1没变  
o1=select.function(obj);
o2=select.function(obj1);
o1和o2 再比较

作者: 蒋昌宏    时间: 2012-3-3 21:46
o1=select.function(obj);
o2=select.function(obj1);  肯定直接报错了
作者: 蒋昌宏    时间: 2012-3-3 22:14
class function
{
    public static boolean equals(Object obj,Object obj1)
      {
       Fu objTmp1 =(Fu) select.function(obj);
       Zi objTmp2 =(Zi) select.function(obj1);         
      
       return (objTmp1.num == objTmp2.num);      
      }               
} 你这样写是把obj固定改变类型为Fu,把obj1固定改变类型为Zi,如果我传参进去把位置颠倒下,就肯定会报 xxx不能转向xxx  xxx cannot be cast to xxx
作者: 蒋昌宏    时间: 2012-3-3 23:56
{:soso_e179:}忽然间我就了然了!  原来多态还可以用,这个招儿好啊!!!
作者: 蒋昌宏    时间: 2012-3-3 23:56
prelove 发表于 2012-3-3 22:41
让两个类Fu和Zi建立关系吧,这样就可以使用多态了。

class Fu

:lol Good!!!




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