core java I(6e)p148中的一段话,不甚明白,请教,如下:2)编译器检查方法调用中提供的参数类型.如果在所有名为f的方法中有一个的参数类型同调用提供的参数类型最为匹配,那么就选择调用这个方法,这个过程称为"重载解析".例如:对调用x.f("hello"),编译器会挑选f(string),而不是f(int).由于存在类型转换(int转成double,等等),情况会变得负责.如果编译器无法找到任何同参数类型匹配的方法,或者找到了多个参数类型在转换后能够匹配的方法,那么编译器会报告错误.事例:public class Test{
    public Integer copyFactory(Integer source){
         return new Integer(source.intValue());
    }    public Object copyFactory(Object source) throws Exception{
         throw new Exception("error");
    }}上面的代码是正确的,但是我有点疑惑,书中提到的"或者找到了多个参数类型在转换后能够匹配的方法,那么编译器会报告错误",这种情况指的是哪种情况?上面的例子中(Integer 转换为Object)难道不算吗?
事实上上面的代码是正确的,编译也不会报错.欢迎大家讨论.

解决方案 »

  1.   

    Object类对象是个特例吧,它是所有类的超类,如果照楼主的想法的话那岂不是相同的方法名的方法在参数个数相同的情况下只能接收同一种类对象了
      

  2.   

    楼主有点把简单问题复杂化了。其实作者的意思就是指“多个参数类型一致的方法”,只不过说成“多个参数类型在转换后能够匹配的方法”在语言上更为严密。因为,参数传递过程中可以自动向上转型,而不一定是用参数本来的类型来匹配。比如,假设定义了两个方法f(Object o),g(Object o),而调用时使用f("hello"),因为"hello"是在转换后和Object匹配的,而这时有两个能够匹配,所以无法编译。所以这句话不能解释为不允许有多个方法可以与参数转化后相匹配,这是不符合逻辑的。另外,也有可能是在将英文翻译成中文时产生的这种歧义。
      

  3.   

    Dan1980(不用IDE的大傻瓜):
    首先,我看过英文版本,翻译过来就是书中翻译的意思(比较简单,不是什么高深莫测的语句)
    其次,照他说的这个情况,就是我上面举的那个例子(事实上,我举的那个例子调试是正确的,
          也确实可以那么用),我相信作者应该指的不是(
          public Object copyFactory(Object source);
          public Object copyFactory(Object source);就是一个方法不小心写了两遍,这显然是
          不正确的)。
    最后,我也不知道他想表达什么,只能认为是他错了。