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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© FFF 金牌黑马   /  2013-10-13 23:26  /  1803 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 FFF 于 2013-10-14 08:01 编辑
  1.         int show(int a,int b){return 0;}
  2.         public short(int a,int b){return 0;}
复制代码
为什么以上两行代码,不可以出现在同一类或者子父类中?

10 个回复

倒序浏览
首先你的提问我是这样理解的:
首先要理解什么是方法的重载:同一个类中,方法名相同,参数列表不同的2个或多个方法构成方法的重载。
参数列表不同表现在俩个:一是参数个数的不同,二是参数类型的不同,当方法名和参数类表都相同时,那就是重复的了。
public short(int a,int b){return 0;}你这个方法写的不正确:首先没有返回值,也不知道是不是构造函数,还有方法名,
回复 使用道具 举报
你是不是想问返回值类型不同、函数名和参数列表相同的两个函数为什么不能定义在同一个类中!?
因为这个类实例化后调用函数的时候不确定使用哪个函数!!
不会出现相同的参数传到同一个函数里面出现两种类型的结果的情况。
回复 使用道具 举报
第一句代码是没有问题的,起码语法没错
问题在第二句代码:1,short是java中的关键字,是不能用作函数名的
                           2,你没有写返回值类型的话,默认是void,但是函数里又返回一个0,就是返回int类型,                   这不是冲突了吗?
回复 使用道具 举报
        int show(int a,int b){return 0;}
        public short(int a,int b){return 0;}
理解:
第一行代码是没哟错误的,不过short不应该是八种基本数据类型吗?
怎么用作变量方法了?还是楼主写错了?
回复 使用道具 举报
FFF 金牌黑马 2013-10-14 08:01:02
地板
代码没有错误,题目是毕向东比老师给出来的!他说了,本身命名没有错误,只是不能在同一类或者子父类中同时存在!
不懂的,请不要误导别人,谢谢!
回复 使用道具 举报
我一看也以为你第二个写错了,以为你想问的是关于函数重载的问题,函数重载与返回值类型没关系的,第二个有return语句为什么没有返回值哦,我也是第一次见这样的,看来还得更努力啊!
回复 使用道具 举报
楼主,我试过了,第二个方法无论是否与第一个方法在同一个类或在父子类中,它都是错的啊,太吊我胃口了,楼主四不四写错了?
回复 使用道具 举报
FFF 金牌黑马 2013-12-28 09:43:18
9#
rainforestking 发表于 2013-12-28 09:37
楼主,我试过了,第二个方法无论是否与第一个方法在同一个类或在父子类中,它都是错的啊,太吊我胃口了,楼 ...

Double写成Public了、你改过来就好了。
回复 使用道具 举报
楼主我十分肯定你的short函数名不对,eclipse报错,而且Sup之后编译还是有问题,函数名一定是show,这道题考的是函数签名,返回值不属于函数签名的一部分,也就是说,两个或者多个同名函数,jvm是通过各个同名函数的参数类型、参数个数或者参数顺序的不同区别不同的函数的,只要同名函数的参数类型、个数、顺序有一个或者多个不同时,就认为是不同的函数,但是,如果同名函数只有返回值不同,而紧跟返回值后面书写的函数名、参数情况完全一样的话,jvm是区分不了的,认为是同一个函数,这样就出现了函数重复定义的错误。没看晕吧?!下面给几个例子:

假如我们定义了两个名字同为MyFun的方法(就是上文说的函数,写得可能有点不严谨,见谅!):
  1. int MyFun(int i,intj)
复制代码
  1. int MyFun(int i,double j)
复制代码

是正确的,因为两个方法的参数类型不同。

  1. int MyFun(int i,int j,int k)
复制代码
  1. int MyFun(int i,int j)
复制代码

是正确的,因为两个方法的参数个数不同。

  1. int MyFun(int i, double j)
复制代码
  1. int MyFun(double j,int i)
复制代码

是正确的,因为两个方法的顺序不同。

以上三种情况总结起来就是:只要方法的参数“长相”不一样,就是不一样的函数

在看下面的代码:
  1. int MyFun(int i,int j)
复制代码
  1. double MyFun(int i,int j)
复制代码

这两个方法的名字,参数“长相”完全相同,但是只有返回值不同,这时就出现了问题,java标准(也包括其他大部分高级语言),并不承认这样定义的方法是不同的方法,于是就出现了重复定义。楼主可以去问问度娘有关【函数签名】的相关信息,就应该会明白了
回复 使用道具 举报
ztwztw 中级黑马 2013-12-31 10:14:48
11#
因为方法的返回类型不同,调用的时候不知道返回什么类型的数据
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马