黑马程序员技术交流社区

标题: 关于函数重载的问题,求前辈们帮忙! [打印本页]

作者: 黑马-幻灭    时间: 2014-4-27 20:35
标题: 关于函数重载的问题,求前辈们帮忙!
本帖最后由 黑马-幻灭 于 2014-4-27 21:40 编辑

在毕老师第三天视频有一节函数重载的练习

判断函数重载:
给定的函数:void show(int a,char b,double c){}

a、int show(int a,double c,char b){} //重载 因为参数类型不同,注意:重载和返回值类型没关系。
b、double show(int x,char y,double z){} //没有  这个函数不能和给定函数存在同一个类中。


因为a选项说重载和返回值类型没关系,但是b选项为什么还要说“返回值是double还是没有返回值,不确定”
要说它没有函数重载也是从参数列表来说!

理解不了!!!!!!!!!!!


作者: 焚雨成灰    时间: 2014-4-27 20:50
因为你第二个double show参数类型和void show是一样的,你可以把double show中的比如说把int改成String试试
作者: 执笔梦    时间: 2014-4-27 20:50
本帖最后由 执笔梦 于 2014-4-27 20:58 编辑

我不是很理解你想说什么
1.void show(int,char b,double c){}
2.double show(int x,char y,double z){}
这两个方法不能在同一个类中定义,因为两个方法并没有重载,不能通过返回值不同,就说这两个方法重载,重载和返回值类型没关系。
有些方法是没有返回值的,
比如,你调用方法show(10,'k',2.2);你2个show()方法参数类型和个数都一样,JVM不确定你要调用那个.。


作者: a3330682    时间: 2014-4-27 20:53
首先重载与返回值类型是没有关系的;所以a是应该能理解吧;b选项说“返回值是double还是没有返回值,不确定“的意思是如果一个函数中出现了这两个方法你去调用的话,编译器知道调用哪个嘛?由于编译器不能区别,所以这两个方法是不能共存在一个函数中的;
作者: kuroro自走核炮    时间: 2014-4-27 20:59
void show(int a,char b,double c){}
a、int show(int a,double c,char b){}
首先这两个做比较,其中传入的参数类型是不同的。那么程序在你传入参数的时候就知道你想要调用的是哪一个方法了,所以返回值是没有问题的。

void show(int a,char b,double c){}
b、double show(int x,char y,double z){}
再来看这俩,你发现没有,其传入参数类型是一样的,那么问题来了,你传入int 7,char ‘a‘,double 6.5,那么这时候系统要调用哪个方法呢?
系统也懵了,那么编译就通过不了。
作者: 龙健    时间: 2014-4-27 21:20
这完全没有冲突,只是你没注意理解老师所说的问题,他说的是b答案就是为什么重载和返回类型无关,他的意思是说如果你的两个函数的参数类型和参数个数都是一样的,只是返回类型不一样,那么如果你去调用它(编译都不能通过,这里假设能通过),那么会调用那一个函数呢,是返回double的还是返回void的呢?函数名一样,参数列表也一样,会调用哪一个????给你你都不知道,那计算机更不得疯了。老师的意思就是说为什么重载和返回值无关,而不是说b答案不正确的原因是什么返回值不确定,主要是你没理解这句话,没联系老师说的上下文
作者: 黑马-幻灭    时间: 2014-4-27 21:35
kuroro自走核炮 发表于 2014-4-27 20:59
void show(int a,char b,double c){}
a、int show(int a,double c,char b){}
首先这两个做比较,其中传入 ...

哦  对对,我疏忽了,谢谢兄弟了!
作者: 黑马-幻灭    时间: 2014-4-27 21:38
龙健 发表于 2014-4-27 21:20
这完全没有冲突,只是你没注意理解老师所说的问题,他说的是b答案就是为什么重载和返回类型无关,他的意思 ...

对,我知识想着返回值类型  但是没有想到参数的问题,谢谢兄弟了!
作者: 小马初长成    时间: 2014-4-27 22:07
首先咱们温习下函数的格式
函数的格式:
        修饰符 返回值类型 函数名(参数类型 形式参数1,参数类型 形式参数2)

        执行语句;
        return返回值;

返回值类型:函数运行后的结果的数据类型
参数类型:是形式参数的数据类型。
形式参数:是一个变量,用于存储调用函数时传递给函数的实际参数。
实际参数:传递给形式蚕食的具体数值。
return:用于结束函数。
返回值:该值会返回给调用者
讲解一下这里:
给定的函数:void show(int a,char b,double c){}
注意给定函数void show是有参无返回类型的函数
b、double show(int x,char y,double z){}
而b选项的这个函数是有参有返回类型的函数
在同一个类中的show()函数同时出现了 无返回类型的函数 和 有返回类型double的函数
那么在调用这个函数的时候无法确定是否有返回值类型。
作者: 龙健    时间: 2014-4-27 22:08
黑马-幻灭 发表于 2014-4-27 21:38
对,我知识想着返回值类型  但是没有想到参数的问题,谢谢兄弟了!

客气了,大家都是学习嘛,可能还会成为同学哦
作者: Gyx    时间: 2014-12-26 19:58
豆大神!强啊!




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