黑马程序员技术交流社区

标题: 初学者小问题 [打印本页]

作者: 十甫寸    时间: 2013-8-2 00:58
标题: 初学者小问题
本帖最后由 杨兴庭 于 2013-8-2 18:46 编辑

int show (int a, int b) {return 0;}
public short show (int a, int b) {return 0;}
为什么下面的函数不可以和上面的函数出现在同一类中,或者子父类中?
作者: 逆袭的风    时间: 2013-8-2 01:05
上下两个函数,函数名相同,参数类型相同,定义在同一个类中,会出现函数重名。
另外,再说一下函数的重载
重载的两个函数的函数名相同,而参数类型不同,这个与返回值类型无关,也就是是说和返回int型还是short型无关
作者: doitforyou    时间: 2013-8-2 01:17
1.在同一个类中,重名的函数必须要构成重载,即参数列表不同才可以同时存在,
  因为虚拟机在调用函数的时候,如果函数同名,则通过参数类型来决定调用哪个。
  如果上述两个函数在同一个类中存在,会造成调用混乱,所以不会通过编译。
2.对于子父类中,如果一个类作为另一个类的子类,自然也会继承父类的属性和方法,原理其实还是一样的,
  主要看你调用时会不会让编译器识别,对于父类中的方法可以重写,上述两个方法既不构成重载,也不属于重写,所以不能同时存在。
总结:两个方法能否同时存在,主要还是看调用时虚拟机可不可以识别。还有什么疑问可以继续说,共同进步。

那个能告诉我下,名字怎么改成实名吗?谢谢了
作者: 手心里的温柔    时间: 2013-8-2 02:19
简单来说 同一个类中有两个同名方法(参数类型也一致),当你调用show()方法时,你是运行哪个呢?
这个不是方法的重载
子父类中,子类会继承父类方法,道理同上


希望能帮到你 共同学习哈
作者: 一直有你    时间: 2013-8-2 08:07
在同一个类中定义方法时,方法名和参数的类型和个数都相同的话是不允许的。
作者: breaveheart    时间: 2013-8-2 09:16
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)之类的,
这样传入的参数不同,只会算重载,那么便可以同时存在一个类中。
作者: 单凯    时间: 2013-8-2 10:17
1,两个函数同名,在一个类中,叫做重载,但必须满足参数值类型或者个数不同;
2,两个函数同名,在父子类中,叫做重写,或者覆盖,必须满足返回类型,函数名,参数个数及类型完全相同;
你这俩函数不满足上述任何一个条件,所以都通不过编译
作者: yan    时间: 2013-8-2 10:27
这两个函数出现在同一个类中的时候,重载的意思的是 函数名一样,参数列表不一样,而在你写的程序中,函数名和参数列表都一致,已经重名。
而在子父类中,子类可以继承父类,但是必须满足 返回值类型,函数名和参数列表一致,此时你给的条件也不满足,所以也无法通过编译
作者: 耶稣说wō乖    时间: 2013-8-2 11:58
这个你可以具体参照一下毕老师关于函数重载的视频哦
里面第一段就显示了
重载的特点:与返回值类型无关,只看参数列表。
因此你的这个函数
  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. }
复制代码

作者: 王靖远    时间: 2013-8-2 12:07
同名同参即为相同函数。不符合重载的条件。
重载需要同名不同参,返回值不考虑。
作者: 黑马王晓明    时间: 2013-8-2 19:44
函数的重载  一个类中 方法名相同 参数列表不同(参数的类型不同,或者参数的个数不等)
函数的重写(覆盖)  子类继承父类以后 子类会继承到父类的成员方法和成员变量  子类与父类有相同方法名,返回值类型,和参数列表




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