黑马程序员技术交流社区

标题: 关于函数重载的问题,问下原理! [打印本页]

作者: 彭怀志    时间: 2012-2-3 11:42
标题: 关于函数重载的问题,问下原理!
本帖最后由 彭怀志 于 2012-2-3 12:46 编辑

以下三个个函数 1.   void test( int a;double b;char c)
                       2.      int test( int m;char n; double o)
                       3.    double  test( int x;int y;char z)
1和2函数重载了,因为参数类型不一样。但1和3没有重载,原因说是这个两个函数不能同时出现在主函数当中,了解到函数重载与返回值类型没有关系的吗,所以求解释,有原理更好;
作者: 林铁柱    时间: 2012-2-3 12:00
只有返回值类型不同的函数不能重载
(注意只有两个字,也就是说在参数一致的情况下 不能重载)

重载函数必须是参数个数或类型不同(强调参数必须不一致)

作者: 刘基军    时间: 2012-2-3 12:18
重载:
1.方法名称一样
2.参数不一样(个数或类型不同)

方法返回值不作为判断依据,
另外,代码测试是正常,
  1. class TestDemo
  2. {
  3.         void test( int a,double b,char c)
  4.         {
  5.           System.out.println(a+","+b+","+c);      
  6.         }
  7.         int test( int m,char n, double o)
  8.         {
  9.           System.out.println(m+","+n+","+o);   
  10.           return 1;     
  11.         }
  12.         double  test( int x,int y,char z)
  13.         {
  14.           System.out.println(x+","+y+","+z);     
  15.           return 1.0;      
  16.         }
  17.         
  18.         public static void main (String args[])
  19.         {
  20.                                         TestDemo td = new TestDemo();
  21.                                         td.test(1,1.0,'a');
  22.                                         td.test(1,'a',1.0);
  23.                                         td.test(1,1,'a');
  24.         }
  25. }
复制代码

作者: 王文龙    时间: 2012-2-3 13:50

方法重载在保证方法名相同的情况下,
与返回值类型无关,只与参数的个数和类型有关.
eg:int get(int a,int b)与void get(int a,int b),
当创建对象调用get方法时,JVM不能识别此对象调用的是返回哪个类型的方法.
作者: 荣凯旋    时间: 2012-2-3 14:29
你们回答的你看就知道没仔细看他提问的问题~
作者: 许涛    时间: 2012-2-3 15:54
本帖最后由 许涛 于 2012-2-3 15:54 编辑

回楼主:重载和返回值类型没关系

重载与否只和参数列表有关
具体来说参数列表有两个方面,一个是参数个数,一个数参数类型(注意:参数名不作为区分依据)

原理方面可以这样理解:
好比区分双胞胎,可以通过胎记一样。当你调用一个方法的时候,如果有多个方法同名,系统怎样知道你要调用哪个方法呢?此时的参数个数和类型就是那个所谓的“胎记”。其它的像返回值类型和参数名什么的都是浮云~~这样或许会好理解一点  : )




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