重载方法匹配算法
来源:互联网 发布:杨辉三角 递归 python 编辑:程序博客网 时间:2024/05/21 12:41
(2.3.1的补充资料)泛读
Java overload resolution——重载方法匹配算法如下:
(1)找出所有能够调用的方法。能够调用的方法意味着形参个数等于实参个数,实参的类型能够转换为方法形参的类型。
(2)如果实参与形参的类型能够直接对应,则执行该方法。
(3)如果能够调用的方法只有一个,则执行该方法。
(4)能够调用的方法不止一个时,逐一作出判断:如果一个方法的类型签名都可以赋值给另一个方法,则后者(类型大者)被排除;重复此操作,直到无法排除为止。【the Most Specific Method】
(5)经过步骤(4),如果只剩下一个方法,则执行该方法;或者编译器报错。但是,自动装箱和变长参数会使问题更复杂(还有import static 因素,在下一节2.3.2)。所以,大致了解一下就可以了。
①首先不考虑自动装箱和变长参数②再加上自动装箱③再加上自动装箱变长参数
例子1:有void m(Object )、void m(int[] )、m(int )方法,
Object obj = null;
m(obj);
按照(2)调用m(Object )
例子2:有void m(Object )、void m(int[] )、m(int )方法,
m(null);
按照(4),排除m(Object )后,调用void m(int[] )
例子3:有void m(Object )、void m(int[] )、m(String )方法,
m(null);
按照(4),排除m(Object )后,void m(int[] )和m(String )无法排除。按照(5),编译报错。
例子4:有void f(double,float )、void f(float , double )方法,
f(12 ,9);
按照(5),编译报错。
例子5:有void f(double,float )、void f(float , double )和void f(double ,int )方法,
f(12 ,9);
按照(5),编译报错。f(double,float )- f(float , double )
例子6:有void f(double,float )、void f(float , double )和void f(float,int )方法,
f(12 ,9);
按照(4), 调用f(float , int)
http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.12
- 重载方法匹配算法
- 关于java重载(重载方法匹配优先级)
- 方法重载类型匹配顺序
- 关于Java重载方法匹配优先级
- java重载方法匹配的优先级
- Java中的重载方法之匹配优先级
- 反射重载方法(发现不明确的匹配)
- java关于重载带来的难题—方法匹配
- c#反射重载方法(发现不明确的匹配)
- Java方法重载后的匹配规则的一个例子
- c#反射重载方法(发现不明确的匹配)
- 局部立体匹配算法BM中的匹配代价聚合方法
- 函数重载与匹配
- 重载的函数匹配
- C++ 重载函数匹配
- s_重载匹配
- 方法重载
- 重载方法
- 【PUSH】 自己开发的任务管理工具
- libevent源码深度剖析十一
- NSURLSession
- libevent源码深度剖析十二
- 信赖域法+狗腿法在回归分析中的应用
- 重载方法匹配算法
- libevent源码深度剖析十三——libevent信号处理注意点
- 安卓开发用SharedPreferences保存bitmip图片
- win7 64位利用eclipse搭建android开发环境教程
- HDU 4819 Mosaic 二维线段树
- C程序内存管理
- 安装gcc 3.4
- jq实现图片轮播:圆形焦点+左右控制+自动轮播
- 巨坑,PendingIntent.getBroadcast