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

© tanlei200620 黑马帝   /  2012-2-22 19:51  /  2586 人查看  /  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 个回复

正序浏览
很明显函数调用看参数类型来调用的,包括类型和顺序,没有优先不优先的 个人见解!
回复 使用道具 举报
泮和顺 发表于 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)
回复 使用道具 举报
张红 发表于 2012-2-23 14:18
你看错误提示
The method add(int, float) is ambiguous for the type
ambiguous 是有歧义的意思

你说是优先级的问题 那如果就一个你说可行 对吗
回复 使用道具 举报
张红的实验方法 很棒,学习了
回复 使用道具 举报
你看错误提示
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

查看全部评分

回复 使用道具 举报
Test3.add((short)3, 4);//无法通过编译
应该是不可以通过的,因为没有一个add(int,int)的参数列表。

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马