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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

彭怀志

初级黑马

  • 黑马币:

  • 帖子:

  • 精华:

© 彭怀志 初级黑马   /  2012-2-3 11:42  /  1865 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 彭怀志 于 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没有重载,原因说是这个两个函数不能同时出现在主函数当中,了解到函数重载与返回值类型没有关系的吗,所以求解释,有原理更好;

点评

同学,你好好看看 毕老师关于重载的课程,在第三天第14段中~你的问题提的不对~写仔细啦~  发表于 2012-2-3 14:27

6 个回复

正序浏览
许涛 黑马帝 2012-2-3 15:54:10
7#
本帖最后由 许涛 于 2012-2-3 15:54 编辑

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

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

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

评分

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

查看全部评分

回复 使用道具 举报
你们回答的你看就知道没仔细看他提问的问题~
回复 使用道具 举报

方法重载在保证方法名相同的情况下,
与返回值类型无关,只与参数的个数和类型有关.
eg:int get(int a,int b)与void get(int a,int b),
当创建对象调用get方法时,JVM不能识别此对象调用的是返回哪个类型的方法.

评分

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

查看全部评分

回复 使用道具 举报
其实函数的重载
在内存的时候是根据动态绑定的this指向的对象来查询方法区中类的方法
根据的是方法名和传入的参数类型来识别,
test( int ;char ; double )
要是子类有所调用的方法就不找寻父类的,
要是子类没有,就继续找寻父类的方法

评分

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

查看全部评分

回复 使用道具 举报
重载:
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. }
复制代码

评分

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

查看全部评分

回复 使用道具 举报
只有返回值类型不同的函数不能重载
(注意只有两个字,也就是说在参数一致的情况下 不能重载)

重载函数必须是参数个数或类型不同(强调参数必须不一致)
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马