黑马程序员技术交流社区
标题:
关于重载的一个有趣的问题?
[打印本页]
作者:
杨海波
时间:
2012-6-17 10:32
标题:
关于重载的一个有趣的问题?
本帖最后由 杨海波 于 2012-6-17 17:23 编辑
在java编程思想上看到这个问题:
class OverLoadDemo
{
public static void main(String[] args)
{
OverLoad ol = new OverLoad();
ol.run("123");
}
}
class OverLoad
{
public static Object run(Object obj)
{
System.out.println("obj:"+"123");
return obj;
}
public static Object run(String str)
{
System.out.println("str:"+"123");
return str;
}
}
复制代码
运行结果是;
str:123
这个时候应该是重载了,为什么不调用参数为obj的run方法呢?
求高手指点?
作者:
张_涛
时间:
2012-6-17 10:40
根据程序,可以发现,ol.run("123");即匹配public static Object run(Object obj),又匹配public static Object run(String str),而最终执行了后者,原因如下:
Java的重载解析过程中分为以下两个阶段:
1.第一阶段JVM将会选取所有可获得并匹配调用的方法或构造器,在此,public static Object run(Object obj)和public static Object run(String str)都被选取出来
2.第二阶段决定到底调用哪个方法,此时JVM会在第一阶段选取的方法或构造器中再次选取最精确匹配的那一个。对于本程序来说,ol.run("123");很明显更匹配public static Object run(String str),而不是更匹配public static Object run(Object obj)。
因此,最后调用的是public static Object run(String str)。
作者:
黄连兵
时间:
2012-6-17 10:44
你认为"123"是用String来描述准确点呢?还是用Object来描述好一点呢?
作者:
李元峰
时间:
2012-6-17 10:49
黄连兵 发表于 2012-6-17 10:44
你认为"123"是用String来描述准确点呢?还是用Object来描述好一点呢?
反问的好!
作者:
杨海波
时间:
2012-6-17 10:50
这个不能我认为!!兄弟
作者:
车风波
时间:
2012-6-17 10:53
因为"123" 匹配run(String str)这个方法了,就不用强转了,要用object还得转,jvm没那么笨。
作者:
姚玉鹏
时间:
2012-6-17 11:11
你传的是String 对象 如果你传的是Objec 就会OBj123
class OverLoadDemo
{
public static void main(String[] args)
{
OverLoad ol = new OverLoad();
Object obj="13";
ol.run(obj);
}
}
class OverLoad
{
public static Object run(Object obj)
{
System.out.println("obj:"+"123");
return obj;
}
public static Object run(String str)
{
System.out.println("str:"+"123");
return str;
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2