黑马程序员技术交流社区

标题: 为什么这两个函数不能在同一个类当中? [打印本页]

作者: 何招俊    时间: 2012-2-14 12:31
标题: 为什么这两个函数不能在同一个类当中?
定义一个父类:
class Demo{
                 int show(int a, int b){
                 return 0;
       }
}
为什么下面这个函数不能存在于该类的子类当中:
public short show(int a, int b){
                return 0;
}
作者: 侯丽星    时间: 2012-2-14 12:39
因为子类对象在调用show时,不知该调用哪一个。
作者: 成果    时间: 2012-2-14 13:05
这个不是重载问题么。重载要求函数参数个数或类型不同。你这就返回值类型不同。。当然不行。
作者: 刘基军    时间: 2012-2-14 13:08
返回值类型不一致,所以不是重写。

作者: 姚立明    时间: 2012-2-14 13:36
函数重载时,调用时要根据你传入的参数的类型来决定使用哪个函数,而这两个函数参数个数与类型均相同,当执行到:对象.show(a,b);假设a,b是整形变量,这是存在两个这样可以调用的show函数,因此发生错误。即在java中不允许这样的两个函数同时存在,否则编译不能通过。
作者: 彭坤    时间: 2012-2-14 13:38
父类show方法的返回值是int,但是子类里面的show方法的返回值是short,继承并override的时候不能改返回值类型。
所以那就不是重写了,不是重写那相当与有两个同名的show方法,系统会根据规则判断是不是重载overload,两个show方法中的参数类型和个数是相同的,而且无法以返回型别作为重载函数的区分标准,所以也不能算是重载。那么既不是重写,也不是重载,那就是重名,方法重名肯定报错啦
作者: 毛溯澜    时间: 2012-2-14 14:45
返回值类型不可以用作为方法重载的区别根据,
编译器会将两个show视为重复的定义。
作者: 钟保罗    时间: 2012-2-15 15:55
因为父类的
  1. int show(int a, int b){
  2.                  return 0;
  3.        }
复制代码
方法与子类的
  1. public short show(int a, int b){
  2.                 return 0;
  3. }
复制代码
返回类型不同,所以不是重写!  当调用show函数时,不知道是调用父类的,还是子类的!  
作者: 黄锦成    时间: 2012-2-15 16:44
当你调用方法,如:
   show(1,1);
我不要返回值,java虚拟机不知道你到底想调用哪一个。所以方法重载不能看返回类型,要看参数列表




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