zoukankan      html  css  js  c++  java
  • 重载方法匹配算法

    C++

    http://en.cppreference.com/w/cpp/language/overload_resolution

    Java

    http://www.2cto.com/kf/201410/339676.html

    (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

  • 相关阅读:
    Linux零拷贝技术 直接 io
    纯Python模式
    c 越界 数组越界
    哈希 二叉树
    Cache busting
    sub esp
    lisp 代码即数据
    hexdump
    nmap
    对象 闭包
  • 原文地址:https://www.cnblogs.com/lilei9110/p/7183675.html
Copyright © 2011-2022 走看看