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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杨海波 中级黑马   /  2012-6-17 10:32  /  1674 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杨海波 于 2012-6-17 17:23 编辑

在java编程思想上看到这个问题:
  1. class OverLoadDemo
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 OverLoad ol = new OverLoad();
  6.                 ol.run("123");
  7.         }
  8. }

  9. class OverLoad
  10. {
  11.         public static Object run(Object obj)
  12.         {
  13.                 System.out.println("obj:"+"123");
  14.                 return obj;
  15.         }
  16.         public static Object run(String str)
  17.         {
  18.                 System.out.println("str:"+"123");
  19.                 return str;
  20.         }
  21. }
复制代码
运行结果是;
str:123
这个时候应该是重载了,为什么不调用参数为obj的run方法呢?
求高手指点?

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

6 个回复

倒序浏览
根据程序,可以发现,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)。

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

回复 使用道具 举报
你认为"123"是用String来描述准确点呢?还是用Object来描述好一点呢?
回复 使用道具 举报
黄连兵 发表于 2012-6-17 10:44
你认为"123"是用String来描述准确点呢?还是用Object来描述好一点呢?

反问的好!
回复 使用道具 举报
这个不能我认为!!兄弟
回复 使用道具 举报
因为"123" 匹配run(String str)这个方法了,就不用强转了,要用object还得转,jvm没那么笨。
回复 使用道具 举报
你传的是String 对象   如果你传的是Objec  就会OBj123
  1. class OverLoadDemo
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 OverLoad ol = new OverLoad();
  6.                 Object obj="13";
  7.                 ol.run(obj);
  8.         }
  9. }

  10. class OverLoad
  11. {
  12.         public static Object run(Object obj)
  13.         {
  14.                 System.out.println("obj:"+"123");
  15.                 return obj;
  16.         }
  17.         public static Object run(String str)
  18.         {
  19.                 System.out.println("str:"+"123");
  20.                 return str;
  21.         }
  22. }
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马