锁定老帖子 主题:一道简单的Java题
精华帖 (0) :: 良好帖 (2) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2012-03-02
这个以前还真没有注意到 受教了
|
|
返回顶楼 | |
发表时间:2012-03-05
以前学的时候没有仔细考虑,受教了……
|
|
返回顶楼 | |
发表时间:2012-03-05
hngmduyi 写道
想明白了, 所以 t.myMethod(null); 可以同时调用myMethod(Character c),myMethod(Integer i),myMethod(String s)这三个方法,它们三个都比Object具体,算是同一优先 级吧,因此造成不知道该调用谁了,就报有歧义的错误。。。
不是 只有 public void myMethod(String s) { System.out.println("My String"); }
public void myMethod(Character c) { System.out.println("My Character"); } 编译不通过
public void myMethod(String s) { System.out.println("My String"); }
public void myMehtod(Integer i){ System.out.println("My Integer"); } 可以通过 ,没想明白。。。。
|
|
返回顶楼 | |
发表时间:2012-03-05
hngmduyi 写道
想明白了, 所以 t.myMethod(null); 可以同时调用myMethod(Character c),myMethod(Integer i),myMethod(String s)这三个方法,它们三个都比Object具体,算是同一优先 级吧,因此造成不知道该调用谁了,就报有歧义的错误。。。 我觉得这个解释 很合理 |
|
返回顶楼 | |
发表时间:2012-03-05
正如sgq0085所说的那样:
public void myMethod(String s) { System.out.println("My String"); } public void myMehtod(Integer i){ System.out.println("My Integer"); } 能正确编译,也能正常运行,而且始终执行String参数的方法,这又是为什么呢? |
|
返回顶楼 | |
发表时间:2012-03-05
tiandizhiguai 写道 iaimstar 写道 重载的一个原则就是精确查找
null这里 代表的意思相当于任何对象 相比object,String更加精确 所以输出的是My String 正解,多谢啦! 又多了解一下 呵呵 |
|
返回顶楼 | |
发表时间:2012-03-05
rain_08 写道
hngmduyi 写道
想明白了, 所以 t.myMethod(null); 可以同时调用myMethod(Character c),myMethod(Integer i),myMethod(String s)这三个方法,它们三个都比Object具体,算是同一优先 级吧,因此造成不知道该调用谁了,就报有歧义的错误。。。 我觉得这个解释 很合理 自己去试了一下 Character Integer String 的确属于同一优先级别,只要有两个存在或者以上就会报“歧义”的错误。学习了 |
|
返回顶楼 | |
发表时间:2012-03-06
执行与null更接近的,显然Object范围更大,所以是String!
|
|
返回顶楼 | |
发表时间:2012-03-06
tiandizhiguai 写道 正如sgq0085所说的那样:
public void myMethod(String s) { System.out.println("My String"); } public void myMehtod(Integer i){ System.out.println("My Integer"); } 能正确编译,也能正常运行,而且始终执行String参数的方法,这又是为什么呢? 差点被忽悠了。。。你知道为什么吗?那是因为他把myMehtod拼错了。。。拼对的情况下是不会通过的。。。 |
|
返回顶楼 | |
发表时间:2012-03-06
shootyou 写道 tiandizhiguai 写道 正如sgq0085所说的那样:
public void myMethod(String s) { System.out.println("My String"); } public void myMehtod(Integer i){ System.out.println("My Integer"); } 能正确编译,也能正常运行,而且始终执行String参数的方法,这又是为什么呢? 差点被忽悠了。。。你知道为什么吗?那是因为他把myMehtod拼错了。。。拼对的情况下是不会通过的。。。 好眼力,看来要细心啊! |
|
返回顶楼 | |