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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 蒋昌宏 黑马帝   /  2012-3-3 20:02  /  2171 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

/**
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;有问题

5 个回复

倒序浏览
本帖最后由 王国华 于 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 再比较
回复 使用道具 举报
o1=select.function(obj);
o2=select.function(obj1);  肯定直接报错了
回复 使用道具 举报
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
回复 使用道具 举报
{:soso_e179:}忽然间我就了然了!  原来多态还可以用,这个招儿好啊!!!
回复 使用道具 举报
prelove 发表于 2012-3-3 22:41
让两个类Fu和Zi建立关系吧,这样就可以使用多态了。

class Fu

:lol Good!!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马