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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 十甫寸 中级黑马   /  2013-8-2 00:58  /  2597 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杨兴庭 于 2013-8-2 18:46 编辑

int show (int a, int b) {return 0;}
public short show (int a, int b) {return 0;}
为什么下面的函数不可以和上面的函数出现在同一类中,或者子父类中?

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

10 个回复

正序浏览
函数的重载  一个类中 方法名相同 参数列表不同(参数的类型不同,或者参数的个数不等)
函数的重写(覆盖)  子类继承父类以后 子类会继承到父类的成员方法和成员变量  子类与父类有相同方法名,返回值类型,和参数列表
回复 使用道具 举报
同名同参即为相同函数。不符合重载的条件。
重载需要同名不同参,返回值不考虑。
回复 使用道具 举报
这个你可以具体参照一下毕老师关于函数重载的视频哦
里面第一段就显示了
重载的特点:与返回值类型无关,只看参数列表。
因此你的这个函数
  1. class Demo
  2. {
  3. int show (int a, int b)
  4. {
  5.         return 0;
  6. }
  7. public short show (int a, int b)
  8. {
  9.         return 0;
  10. }
  11. }
复制代码
相当于是定义了两个相同名称的函数。
你想要下面的函数能和上面的函数出现在同一类中,或者子父类中
代码可以改成这样:
  1. class Demo
  2. {
  3. int show (int a, int b)
  4. {
  5.         return a+b;
  6. }
  7. public double show (double a,double b)
  8. {
  9.         return a+b;
  10. }
  11. }

  12. class DemoTest
  13. {
  14.         public static void main(String[] args)
  15.         {
  16.                 Demo d = new Demo();
  17.                 System.out.println(d.show(1,2));
  18.                 System.out.println(d.show(4,5));
  19.         }
  20. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
yan 中级黑马 2013-8-2 10:27:49
8#
这两个函数出现在同一个类中的时候,重载的意思的是 函数名一样,参数列表不一样,而在你写的程序中,函数名和参数列表都一致,已经重名。
而在子父类中,子类可以继承父类,但是必须满足 返回值类型,函数名和参数列表一致,此时你给的条件也不满足,所以也无法通过编译
回复 使用道具 举报
1,两个函数同名,在一个类中,叫做重载,但必须满足参数值类型或者个数不同;
2,两个函数同名,在父子类中,叫做重写,或者覆盖,必须满足返回类型,函数名,参数个数及类型完全相同;
你这俩函数不满足上述任何一个条件,所以都通不过编译

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报
int show (int a, int b) {return 0;}
public short show (int a, int b) {return 0;}
这个其实是同一个函数,int 和 public short只是对函数show(int a,int b)
的修饰。而同一个类里面不能同时存在相同的函数。
如果想同时存在,你可以把后一个改成show(shor a,int b)之类的,
这样传入的参数不同,只会算重载,那么便可以同时存在一个类中。

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报
在同一个类中定义方法时,方法名和参数的类型和个数都相同的话是不允许的。
回复 使用道具 举报
简单来说 同一个类中有两个同名方法(参数类型也一致),当你调用show()方法时,你是运行哪个呢?
这个不是方法的重载
子父类中,子类会继承父类方法,道理同上


希望能帮到你 共同学习哈

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报
1.在同一个类中,重名的函数必须要构成重载,即参数列表不同才可以同时存在,
  因为虚拟机在调用函数的时候,如果函数同名,则通过参数类型来决定调用哪个。
  如果上述两个函数在同一个类中存在,会造成调用混乱,所以不会通过编译。
2.对于子父类中,如果一个类作为另一个类的子类,自然也会继承父类的属性和方法,原理其实还是一样的,
  主要看你调用时会不会让编译器识别,对于父类中的方法可以重写,上述两个方法既不构成重载,也不属于重写,所以不能同时存在。
总结:两个方法能否同时存在,主要还是看调用时虚拟机可不可以识别。还有什么疑问可以继续说,共同进步。

那个能告诉我下,名字怎么改成实名吗?谢谢了

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报
上下两个函数,函数名相同,参数类型相同,定义在同一个类中,会出现函数重名。
另外,再说一下函数的重载
重载的两个函数的函数名相同,而参数类型不同,这个与返回值类型无关,也就是是说和返回int型还是short型无关

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马