黑马程序员技术交流社区

标题: 各位大侠,帮忙看下这个程序问题,谢谢~~ [打印本页]

作者: 杜成龙    时间: 2013-4-18 18:12
标题: 各位大侠,帮忙看下这个程序问题,谢谢~~
本帖最后由 杜成龙 于 2013-4-19 08:49 编辑
  1. class Demo
  2. {
  3. private int num;
  4. Demo(int num)
  5. {
  6. this.num=num;
  7. }
  8. public boolean equals(Object obj)
  9. {
  10. return this.num==obj.num;
  11. }
  12. }

  13. class ObjectDemo
  14. {
  15. public static void main(String[] args)
  16. {
  17. Demo d1=new Demo(4);
  18. Demo d2=new Demo(6);

  19. System.out.println(d1.equals(d2));
  20. }
  21. }
复制代码
我想比较一下同一个类中两个对象的数值是不是相等,写的程序如上面所示,但编译时出现错误如下:
ObjectDemo.java:10: 错误: 找不到符号
                return this.num==obj.num;
                                    ^
  符号:   变量 num
  位置: 类型为Object的变量 obj
1 个错误

我想请教一下怎样才能改的对,实现要求的功能?谢谢啦~~

作者: 高梦晓    时间: 2013-4-18 18:18
你的Object对象要进行强制转换
代码如下:
  1. class Demo
  2. {
  3.         private int num;
  4.         Demo(int num)
  5.         {
  6.                 this.num=num;
  7.         }
  8.         public boolean equals(Object obj)
  9.         {
  10. //强制转换Object对象为Dome对象               
  11.   return this.num==((Demo)obj).num;
  12.         }
  13. }

  14. class ObjectDemo
  15. {
  16.         public static void main(String[] args)
  17.         {
  18.         Demo d1=new Demo(4);
  19.         Demo d2=new Demo(6);
  20.        
  21.         System.out.println(d1.equals(d2));
  22.         }
  23. }
复制代码

作者: 钟林杰    时间: 2013-4-18 18:21
你写个obj. number,那个Objcte类有这个东西吗?
作者: 沈浩    时间: 2013-4-18 18:24
obj  类型是Object    而num是 Demo 的属性    所以要对obj进行类型转换   
作者: U芽Lady    时间: 2013-4-18 18:25
class Demo{

        private int num;

        Demo(int num){

                this.num=num;
        }

        public boolean equals(Object obj){
                Demo d = (Demo)obj;//加个这个,要不然你是让Demo类的对象和Object类的对象比
                return this.num==d.num;
        }

}
作者: 晓风妮子    时间: 2013-4-18 18:27
class Demo

{

private int num;

Demo(int num)

{

this.num=num;

}

public boolean equals(Object obj)//这里相当于将d2传进来了,也就是说Object obj=new Demo(6),在这里完成了向上转型,但是父类中没有num这个成员变量,所以报错,需要向下转型

{
        if(this==obj)//如果传入的是自己,返回false
        return false;
        if(!(obj instanceof Demo))//如果传入的不是Demo类,就返回false
        return false;
        Demo d=(Demo)obj;

    return this.num==d.num;

}

}


class ObjectDemo
{

public static void main(String[] args)
{

Demo d1=new Demo(4);

Demo d2=new Demo(6);


System.out.println(d1.equals(d2));

}

}





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