码迷,mamicode.com
首页 > 其他好文 > 详细

重载方法匹配算法

时间:2014-10-02 02:03:52      阅读:157      评论:0      收藏:0      [点我收藏+]

标签:java   编程导论   

(2.3.1的补充资料)泛读

Java overload resolution——重载方法匹配算法如下:

(1)找出所有能够调用的方法。能够调用的方法意味着形参个数等于实参个数,实参的类型能够转换为方法形参的类型。

(2)如果实参与形参的类型能够直接对应,则执行该方法。

(3)如果能够调用的方法只有一个,则执行该方法。

(4)能够调用的方法不止一个时,逐一作出判断:如果一个方法的类型签名都可以赋值给另一个方法,则后者(类型大者)被排除;重复此操作,直到无法排除为止。

(5)经过步骤(4),如果只剩下一个方法,则执行该方法;或者编译器报错。


但是,自动装箱和变长参数会使问题更复杂。所以,大致了解一下就可以了。


例子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)





重载方法匹配算法

标签:java   编程导论   

原文地址:http://blog.csdn.net/yqj2065/article/details/39724873

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!