论坛首页 综合技术论坛

一道简单的Java题

浏览 19968 次
精华帖 (0) :: 良好帖 (2) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2012-03-02  
这个以前还真没有注意到 受教了
0 请登录后投票
   发表时间:2012-03-05  
以前学的时候没有仔细考虑,受教了……
0 请登录后投票
   发表时间:2012-03-05  
hngmduyi 写道

想明白了,

Integer i=null;
Character c=null;
Object o=null;
这样声明都可以,说明null可以表示这几种类型,(Java中,null是一个关键字,用来标识一个不确定的对象。因此可以将null赋给引用类型变量,但不可以将null赋给基本类型变量。) 

所以 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");

   }

可以通过 ,没想明白。。。。

 

0 请登录后投票
   发表时间:2012-03-05  
hngmduyi 写道

想明白了,

Integer i=null;
Character c=null;
Object o=null;
这样声明都可以,说明null可以表示这几种类型,(Java中,null是一个关键字,用来标识一个不确定的对象。因此可以将null赋给引用类型变量,但不可以将null赋给基本类型变量。) 

所以 t.myMethod(null);   可以同时调用myMethod(Character c),myMethod(Integer i),myMethod(String s)这三个方法,它们三个都比Object具体,算是同一优先 级吧,因此造成不知道该调用谁了,就报有歧义的错误。。。

我觉得这个解释 很合理

0 请登录后投票
   发表时间: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参数的方法,这又是为什么呢?
0 请登录后投票
   发表时间:2012-03-05  
tiandizhiguai 写道
iaimstar 写道
重载的一个原则就是精确查找

null这里 代表的意思相当于任何对象

相比object,String更加精确

所以输出的是My String




正解,多谢啦!



又多了解一下  呵呵
0 请登录后投票
   发表时间:2012-03-05  
rain_08 写道
hngmduyi 写道

想明白了,

Integer i=null;
Character c=null;
Object o=null;
这样声明都可以,说明null可以表示这几种类型,(Java中,null是一个关键字,用来标识一个不确定的对象。因此可以将null赋给引用类型变量,但不可以将null赋给基本类型变量。) 

所以 t.myMethod(null);   可以同时调用myMethod(Character c),myMethod(Integer i),myMethod(String s)这三个方法,它们三个都比Object具体,算是同一优先 级吧,因此造成不知道该调用谁了,就报有歧义的错误。。。

我觉得这个解释 很合理

自己去试了一下 Character Integer String 的确属于同一优先级别,只要有两个存在或者以上就会报“歧义”的错误。学习了

0 请登录后投票
   发表时间:2012-03-06  
执行与null更接近的,显然Object范围更大,所以是String!
0 请登录后投票
   发表时间: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拼错了。。。拼对的情况下是不会通过的。。。
0 请登录后投票
   发表时间: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拼错了。。。拼对的情况下是不会通过的。。。

好眼力,看来要细心啊!
0 请登录后投票
论坛首页 综合技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics