黑马程序员技术交流社区

标题: 方法重载的问题 [打印本页]

作者: 黑马张旭明    时间: 2012-8-8 00:15
标题: 方法重载的问题
class Demo
{
  private int num;
   Demo(int num)
   {
       this.num = num;
   }
public boolean equals(Object obj)
   {
   }
public boolean equals(Demo c)
   {
   }
}

我想问在往equals里传一个Demo对象的话会调用哪一个equals函数,Object什么都可以,而Demo也没有错,两个都行,不知道会调用谁
作者: 周坤    时间: 2012-8-8 01:58
很特殊的重载,会先调用public boolean equals(Demo c),会从具体的来。
作者: 潘星    时间: 2012-8-8 06:08
这里是根据你传入的参数来调用equals方法的,如果你传入的是Demo对象的参数,
就调用equals(Demo c)方法,如果你传入的是除了Demo对象以外的任何参数,都调用 equals(Object obj)
以下是我用代码做的一个测试
class Demo
{
  private int num;
   Demo(int num)
   {
       this.num = num;
   }
public boolean equals(Object obj)
   {
        return true;
   }
public boolean equals(Demo c)
   {
        return false;
   }
}
class DemoTest
{
        public static void main(String[] args)
        {
                Demo d=new Demo(3);
                System.out.println(d.equals("aaa"));//结果为true
                System.out.println(d.equals(2222));//结果为true
                System.out.println(d.equals(new Demo(3)));//结果为false
                System.out.println(d.equals(d));//结果为false
                System.out.println(d.equals(new Demo(4)));//结果为false

        }
}

作者: 程有愿    时间: 2012-8-8 09:03
肯定是调用第二个咯,这本身就是重载的体现啊,不然干嘛要重载呢?楼上的test也可以说明这一点!
作者: 黑马张旭明    时间: 2012-8-8 09:37
嗯,知道了,是优先具体的
作者: 王峰    时间: 2012-8-8 10:11
楼主看看

未命名.jpg (52.48 KB, 下载次数: 32)

看看

看看

作者: 姬仁贵    时间: 2012-8-8 11:21
public boolean equals(Object obj)
   {
   }
public boolean equals(Demo c)
   {
   }
因为两个放发的参数列表的类型不同,所以equals方法重载了
当你调用equals方法时,就要看你传入的实参具体是什么类型的了,如果你传入的是Demo类型的对象那就会执行下面的equals方法,
当你调用除了Demo类型以外的任意一个类型对象的时候就会执行上面一个equals方法。因为上面equals方法的参数类型是Object类型,什么类型的都可以接收(因为多态的原因)。






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