Java是如何调用相应重载方法的

一个类 有多个 方法名相同但参数列表不同的 方法,这种现象称为方法重载( overload )。其中参数列表不同包括以下情形:
参数的个数不同

—参数的类型不同

那么我们在调用其中一个被重载的方法时,Java是如何去寻找到相应的方法的呢?

我们知道Java中的方法是一个实现某种功能的具体程序段,程序段拥有方法名,入口(参数类表),和出口(返回值类型或者void)。Java通过方法名和参数类表调用相应具体方法。


以下讨论的是如何从一个类中寻找可调用的重载方法(假设Java已经通过对象类型或者类名寻找方法所在类):

第一步,判断方法名:

寻找与调用者调用方法名相同的方法

第二步,判断参数个数:

在第一步基础上,寻找与调用者传入参数个数相同的的方法

第三步,判断参数匹配程度:

在前两步基础上,Java会给所有符合参数类型方法一个匹配值

第四步,调用匹配程度最高的方法


   对于前面两步是非常好理解的,对于第三步很多人在学习Java重载的时候容易忽略,往往认为寻找的是参数列表相同的方法。其实Java是允许数据的自动转型(或上转型),所以传入参数可以是要求参数的子类(对于基本数据类型来说传入参数不大于要求参数范围)

如下:

输出:show1


Java通过参数列表匹配程度调用重载方法,调用匹配度最高的,如下:


如果Java通过传入参数寻找到的匹配程度最高的方法是复数个,则会出现报错,如下:


错误为:

注意,不是因为第四个show方法的重载导致的错误,而是由于传入参数导致如果程序运行,则调用方法含糊不清(当然为避免这种错误Java在编译时即报错)


PS.我是初学者,谢谢大家指教,欢迎一起讨论  O(∩_∩)O~~
















  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值