黑马程序员技术交流社区

标题: 关于函数覆盖和重载的一个小疑问 [打印本页]

作者: Rockray    时间: 2013-10-29 21:18
标题: 关于函数覆盖和重载的一个小疑问
本帖最后由 Rockray 于 2013-10-30 18:50 编辑

学的太久印象就容易遗忘啊

class Demo {
      int show(int a,int b) {
            return 0;
      }
}

问下下面这个函数能否存在于Demo的子类中:
      public short show(int a,int b) {
           return 0;
      }
答案是不可以。

突然不理解了,函数的声明不是包括返回值类型、函数名、参数列表这三个部分吗,然后下面这个函数的返回值类型与父类中的不一样,为什么不能出现在子类中呢?难道不是重载吗?
看来还是基础没打牢啊 {:soso_e115:}

作者: 未知数|X|    时间: 2013-10-29 21:22
重载:只看同名函数的参数列表,可以出现在同个类的多个函数之间
int show(int a,int b) {
            return 0;
      }
public short show(int b) {
           return 0;
      }这样是没事的
重写:子父类函数是一模一样的,只发生在子父类直接
作者: 小痞痞    时间: 2013-10-29 21:45
  重载表示同一个类中可以有多个名称相同的方法,但这些方法的参数列表各不相同(即参数个数或类型不同)
class Demo {
      int show(int a,int b) {
            return 0;
      }
}

问下下面这个函数能否存在于Demo的子类中:
      public short show(int a,int b) {
           return 0;
      }

子类和父类的参数都为两个int数、所以不构成重载、重载与返回值无关至于参数类型和个数有关
public short show(int a,short b) {
           return 0;
      }
这样就和demo构成重载了

重载要注意以下的几点:
1、在使用重载时只能通过不同的参数样式。例如,不同的参数类型,不同的参数个数,不同的参数顺序(当然,同一方法内的几个参数类型必须不一样,例如可以是fun(int,float),但是不能为fun(int,int));
2、不能通过访问权限、返回类型、抛出的异常进行重载;
3、方法的异常类型和数目不会对重载造成影响;
4、对于继承来说,如果某一方法在父类中是访问权限是priavte,那么就不能在子类对其进行重载,如果定义的话,也只是定义了一个新方法,而不会达到重载的效果。





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