黑马程序员技术交流社区
标题:
方法重载的问题
[打印本页]
作者:
黑马张旭明
时间:
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 10:11 上传
看看
作者:
姬仁贵
时间:
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