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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© long 中级黑马   /  2013-5-9 21:15  /  1784 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 long 于 2013-5-10 00:45 编辑

OverloadingVarargs2.java无法通过编译,但OverloadingVarargs3.java却顺利通过编译。这是为什么?
  1. //: initialization/OverloadingVarargs2.java
  2. // {CompileTimeError} (Won't compile)

  3. public class OverloadingVarargs2 {
  4.       static void f(float i, Character... args) {
  5.             System.out.println("first");
  6.       }
  7.       static void f(Character... args) {
  8.             System.out.print("second");
  9.       }
  10.       public static void main(String[] args) {
  11.             f(1, 'a');
  12.             f('a', 'b');
  13.      }
  14. } ///:~


  15. //: initialization/OverloadingVarargs3.java

  16. public class OverloadingVarargs3 {
  17.        static void f(float i, Character... args) {
  18.                System.out.println("first");
  19.        }
  20.        static void f(char c, Character... args) {
  21.               System.out.println("second");
  22.        }
  23.        public static void main(String[] args) {
  24.              f(1, 'a');
  25.              f('a', 'b');
  26.       }
  27. } /* Output:
  28. first
  29. second
  30. *///:~
复制代码

评分

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

查看全部评分

5 个回复

倒序浏览
第一个重载的时候
public static void main(String[] args) {
                f(1, 'a');
                f('a');

        }
这样调,试试
回复 使用道具 举报
本帖最后由 黑马-王双 于 2013-5-9 22:03 编辑

class Overloading2
{        
                static void f(float i,Character... args)
                {
                        System.out.println("first");
                }
                static void f(Character... args)
                {
                        System.out.println("second");
                }
                public static void main(String[] args)
        {
                f(1,'a');
                f('a'+0;'b');
        }        
}
Character... args  表示任意多个Character类型的参数,可以是1个或多个。
出错时因为 f('a','b')对两个方法都匹配,系统不知道你要调用的是哪一个。
要么改成上面这样打印结果是
first
first
要么就是你写得static void f(char c ,Character... args)

评分

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

查看全部评分

回复 使用道具 举报
OverloadingVarargs2.java无法通过编译这一句  f('a', 'b');       是因为下面这两个方法都满足 这一句的调用条件,系统不知道该调用哪一个,所以会报错。
static void f(float i, Character... args) {
       System.out.println("first");
      }
static void f(Character... args) {
       System.out.print("second");
      }
回复 使用道具 举报
对 f 的引用不明确, f('a', 'b');都匹配
           
回复 使用道具 举报
OverloadingVarargs2.java中f('a', 'b')方法找不到已声明的匹配参数(类型或个数)的方法
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马