Java 函数查找

Java中, 当继承链上的函数签名都不满足要求的时候, 类型转换是怎么工作的呢? 如果能全面解释一下方法查找的机制就更好了, 谢谢

public class Main {  
    public static void main(String\[\] args) {  
        Son son = new Son();  
        short a = 100;  
        System.out.println(son.plusOne(a));  
    }  
}  
  
class Father {  
    int plusOne(int a) {  
        System.out.println("F");  
        return a + 1;  
    }  
}  
  
class Son extends Father {  
    long plusOne(long a) {  
        System.out.println("S");  
        return a + 1;  
    }  
}  
  
/\* OUTPUT:  
F  
101  
 \*/
阅读 2.4k
2 个回答

自动类型转换会寻找类型最接近的那一个方法,比如与 short a 100 最接近的就是 int a 100,而 char 会自动转换为最接近的 int

方法查找机制的话,有本书没在旁边,但你可以查一下:

  • 《Java 编程思想 第四版》P79 5.2.2 涉及基本类型的重载
  • 《Java 编程思想 第四版》P151 8.2.1 方法调用绑定
  • 《深入理解 Java 虚拟机》类文件结构部分

这个问题有关于java虚拟机的静态分派的概念。
用int变量做例子,首先会找int传参,再找Integer传参,再找Object传参,层层递进的概念,详情可以看下深入理解java虚拟机关于静态分派的部分,跟楼上一样,书不在手边

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题