A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© tanlei200620 黑马帝   /  2012-2-22 19:51  /  2202 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class Test3{
        public static void main(String[] args){
                Test3.add((short)3, 4);//无法通过编译
                Test3.add((short)3, 5.0f);//可以通过编译
        }
       
        public static int add(int a,float b){
                return(int)(a+b);
        }
        public static int add(float a,int b){
                return(int)(a+b);
        }
        public static int add(float a,float b){
                return(int)(a+b);
        }
}

基本类型提升只进行一次??

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

6 个回复

倒序浏览
Test3.add((short)3, 4);//无法通过编译
应该是不可以通过的,因为没有一个add(int,int)的参数列表。

回复 使用道具 举报
你看错误提示
The method add(int, float) is ambiguous for the type
ambiguous 是有歧义的意思
————————————————————————————————————————————————————————
class Test{
public static void main(String[] args) {
                /** 可以通过编译 - 调用的是方法一 */
                add((short) 3, 5.0f);

                /** 优先调用方法四 */
                add((short) 3, 4);

        }

        /**
         * 方法一
         *
         * @param int a
         * @param float b
         * @return int
         */
        public static float add(int a, float b) {
                System.out.println(" method 1 invoke ..");
                return (int) (a + b);
        }

        /**
         * 方法二
         *
         * @param float a
         * @param int b
         * @return int
         */
        public static int add(float a, int b) {
                System.out.println(" method 2 invoke ..");
                return (int) (a + b);
        }

        /**
         * 方法三
         *
         * @param float
         * @param float b
         * @return float
         */
        public static int add(float a, float b) {
                System.out.println(" method 3 invoke ..");
                return (int) (a + b);
        }

        /**
         * 方法四
         *
         * @param int
         * @param int b
         * @return int
         */
        public static int add(int a, int b) {
                System.out.println(" method 4 invoke ..");
                return (int) (a + b);
        }
}
你试着注释一下每一个方法。就可以看出来了 。Test3.add((short)3, 4)优先匹配第四种方法。如果没有第四种方法,它会匹配比它级别高的方法,如第一个或其他。Test3.add((short)3, 5.0f)属于add(int ,float),但第一种和第二种方法均适用,系统不明确对add的引用,所以无法通过编译。总之是一个优先级别的概念。





























评分

参与人数 1技术分 +2 收起 理由
admin + 2

查看全部评分

回复 使用道具 举报
张红的实验方法 很棒,学习了
回复 使用道具 举报
张红 发表于 2012-2-23 14:18
你看错误提示
The method add(int, float) is ambiguous for the type
ambiguous 是有歧义的意思

你说是优先级的问题 那如果就一个你说可行 对吗
回复 使用道具 举报
泮和顺 发表于 2012-2-23 20:11
你说是优先级的问题 那如果就一个你说可行 对吗

Test3.add((short)3, 4);调用以下函数顺序如下
add(int a, int b)
add(int a, float b)  add(float a, int b)//只能存在一种
add(float a, float b)


Test3.add((short)3, 5.0f);调用以下函数顺序如下
add(int a, float b)
add(float a, float b)
回复 使用道具 举报
很明显函数调用看参数类型来调用的,包括类型和顺序,没有优先不优先的 个人见解!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马