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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 付鹏 中级黑马   /  2012-3-10 16:49  /  2484 人查看  /  13 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

今天看视频的时候看见了几个重载
比如
void show(int a,char b,double c) {
}和 后面的
int show(int a , char b) {

是否构成重载的问题 为什么  解释一下原理 别说就是这么规定的 这个我知道  。。。。
返回值不同还能构成重载?

评分

参与人数 1技术分 +1 收起 理由
房宝彬 + 1

查看全部评分

13 个回复

倒序浏览
本帖最后由 贠(yun)靖 于 2012-3-10 17:01 编辑

重载的条件就是 参数的 个数 顺序 类型 只要有一个不同就可以构成重载  但是 函数的修饰符  访问类型 不同是不能构成重载的  
  就可以从参数这考虑了   
  比如你定义几个同名的函数  他们都构成重载  而这个函数要实现的功能  假设为算乘法 求乘积的结果吧
    那么   你要算2个数的乘积呢  还是要算3个数的乘积  还是要算两个都是小数的乘积? 等等
   显然根据需求定义重载的方法的个数   主要看你要让这个重载的方式实现什么功能了  

评分

参与人数 1技术分 +1 收起 理由
房宝彬 + 1

查看全部评分

回复 使用道具 举报
只要方法名一样,而且参数个数或类型不一样,即是重载,因为运行时JVM会根据你传进来的值类型来判断调用哪个方法,为什么会有重载这个词呢?方法重载是让类以统一的方式处理不同类型数据的一种手段,因为好几个方法它们的功能是一样,只是参数类型不一样而已。定义成别的方法名就不好阅读。返回值不同是不能构成重载的。

评分

参与人数 1技术分 +1 收起 理由
房宝彬 + 1

查看全部评分

回复 使用道具 举报
构成重载的条件:参数个数不同或类型不同或顺序不同,但方法名要一致。返回值类型可以相同也不可以不相同,无法以返回类型作为区分重载函数的标准。
也就是说楼主的这个例子是可以构成重载的,因为它参数的个数不同。而返回类型相同与否都不影响它是否为重载。

评分

参与人数 1技术分 +1 收起 理由
房宝彬 + 1

查看全部评分

回复 使用道具 举报
函数重载只看参数个数和类型,不看返回值类型,也就是说如果返回值类型不同,而参数个数和类型都相同时不是重载。刚才你提到的是重载,但void show(int a,int b ,int c)
与int show(int a,int b ,int c)就不是重载,因为它们的参数个数和类型都相同

评分

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

查看全部评分

回复 使用道具 举报
其实很简单,我们可以做一个试验,将参数和返回值都设置为不同,然后主函数访问,看看是否可以定义这种重名的函数,可以的话就是重载,不可以说再多都没用
  1. public class Test1
  2. {
  3.         public static void main(String[]args)
  4.         {
  5.                 show('a','b');
  6.                 show(3,3);
  7.         }
  8.         public static void sop(Object obj)
  9.         {
  10.                 System.out.println(obj);
  11.         }
  12.         public static boolean show(int a,int b)
  13.         {
  14.                 sop(a==b);
  15.                 return (a==b);
  16.         }
  17.         public static int show(char a,char b)
  18.         {
  19.                 sop((char)a+(char)b);
  20.                 return ((char)a+(char)b);
  21.         }
  22. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
房宝彬 + 1

查看全部评分

回复 使用道具 举报
  1. public class TestParam {
  2.        
  3.         /**
  4.          * 可变参数
  5.          * @param x
  6.          * @param argc
  7.          */
  8.         public static void add(int x, int... argc) {
  9.                 int k = x;
  10. /*                for(int i=0; i<argc.length; i++) {
  11.                         k = k + argc[i];
  12.                 }*/       
  13.                 for(int i: argc) {
  14.                         k = k + i;
  15.                 }
  16.                 System.out.println(k);               
  17.         }
  18.        
  19.         public static void main(String[] argc) {
  20.                 add(2, 5);
  21.                 add(2, 5, 7);
  22.         }
  23. }
复制代码
注:Overload:在一个类中定义多个同名的方法,它们或有不同的参数或有不同的参数类型或有不同的参数次序;
而仅返回值类型的不同无法成为构成重载的标准,这个好像老师视频中讲到了

评分

参与人数 1技术分 +1 收起 理由
房宝彬 + 1

查看全部评分

回复 使用道具 举报
学习,学习
回复 使用道具 举报
蒋安国 黑马帝 2012-3-10 19:41:12
9#
你所列举的两个方法构成重载。
重载只要看所比较的几个方法的方法名称是否相同,参数列表是否不同(此处的不同有这么几种:参数个数相同,但是对应位置上的类型至少有一个不同;参数个数不同,类型任意)即可,所比较的方法的返回值类型、方法修饰符不用参与比较,因为就拿返回值类型来说,是否写成相同的要看具体应用,如果我只是想打印,就可以是void,但是如果还想在下面程序中应用这个返回值就要写上具体的返回值类型,因为重载本身的含义就是具有相同的功能,但是具体实现不同,这也是多态性的一种体现。关于参数列表中的参数名称我要强调一下,在比较的时候不用看它是否相同,因为它就是一个记号,如果所比较方法的方法名相同,参数列表中的参数的个数、返回值类型相同(对应位置上的返回值类型相同),但是名称不同,那么所比较方法不构成重载,所以比较的时候不要看它是否有相同的名称。
简而言之:一、看方法名称是否相同。二、方法名相同的前提下,看参数个数是否相同,若不同的话构成重载,相同的话就再看对应位置上的返回值类型是否相同,如果相同不构成重载,不同的话就构成重载。
好像说的有些多,菜鸟我请大家多多指教。

评分

参与人数 1技术分 +1 收起 理由
房宝彬 + 1

查看全部评分

回复 使用道具 举报
小白 黑马帝 2012-3-10 20:37:50
10#
构成重构!与返回值不同!
回复 使用道具 举报
王利强 发表于 2012-3-10 17:34
函数重载只看参数个数和类型,不看返回值类型,也就是说如果返回值类型不同,而参数个数和类型都相同时不是 ...

哥们,一定要看方法名的
回复 使用道具 举报
本帖最后由 泮和顺 于 2012-3-10 23:15 编辑
贠(yun)靖 发表于 2012-3-10 16:59
重载的条件就是 参数的 个数 顺序 类型 只要有一个不同就可以构成重载  但是 函数的修饰符  访问类型 不同 ...


只要签名不同就可以算重载的,类中和继承体系都可以有,当然函数肯定要相同的
签名加返回类型也相同,方法体不一样叫重写,只存在继承体系//签名就是函数名开始到最后不包括方法体
回复 使用道具 举报
方法重载构成条件,当方法具有不同的参数列表,参数类型,并与返回值没有关系时,方法名也要相同时,才可构成重载的,
如 :public void add(int a ,int b ){}  与  public int add(int a,int b){return a+b;} 不可以构成重载,会报错的哦
回复 使用道具 举报
重载只和方法名,参数类型,参数个数,参数类型顺序有关,当方法名不同时,很明显不是重载,那是另一个方法;方法名相同,参数类型和参数个数以及参数类型的顺序,只要有一个不同,那就是重载了

重载和方法的返回值类型没有关系,
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马