黑马程序员技术交流社区

标题: 一个重载函数的小问题 [打印本页]

作者: long    时间: 2013-5-9 21:15
标题: 一个重载函数的小问题
本帖最后由 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. *///:~
复制代码

作者: 仲伟    时间: 2013-5-9 21:38
第一个重载的时候
public static void main(String[] args) {
                f(1, 'a');
                f('a');

        }
这样调,试试
作者: 黑马-王双    时间: 2013-5-9 21:47
本帖最后由 黑马-王双 于 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)


作者: 白磊    时间: 2013-5-9 22:21
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");
      }
作者: 金辉    时间: 2013-5-9 22:33
对 f 的引用不明确, f('a', 'b');都匹配
           
作者: 张变    时间: 2014-2-25 14:23
OverloadingVarargs2.java中f('a', 'b')方法找不到已声明的匹配参数(类型或个数)的方法




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2