代码笔记2014-4-22

原创
2014/04/22 11:18
阅读数 190

今天做题时遇到一个新词:override。
一无所知,于是百google度一下~


override

      可译为覆盖、重写。它是覆盖了一个方法并且对其重写,以求达到不同的作用。

       我们在继承中可能会在子类覆盖父类中的方法(method)。

在覆盖要注意以下的几点:
1、覆盖的方法的参数列表(signature)必须要和被覆盖的方法的参数列表完全匹配,才能达到覆盖的效果;
2、覆盖的方法的
返回值必须和被覆盖的方法的返回一致;
3、覆盖的方法所抛出的异常必须和被覆盖方法的所抛出的异常一致,或者是其子类;
4、被覆盖的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行覆盖

到这里,我就很奇怪了,感觉这个override和重定义(redifine)差不多啊。

于是又找到重写和重定义的区别,如下:

重写(override):

        子类中对父类中函数相同名称(可以不同参数)的重写。(有动态绑定的特性,也即如果父类指针指向了一个子类,通过该指针调用该函数时会动态调用子类重写了的方法)

        被重写的函数 访问级别可以扩大,但不能缩小。比如private的被重写为public、protected可以;但public、protected被重写为private则不可以(因为可能会通过父类的指针来访问这个虚函数)


重定义(redifining):

       子类中重新定义父类中相同名称(可以不同参数)的非虚函数(没有动态绑定的特性,即使父类指针指向了一个子类,通过该指针调用该方法时也只是父类未被重定义的方法)


概括一下好像就区别于是否虚函数:

        是虚函数——override(重写)

  是非虚函数——redifining(重定义)



又找到override和overload的区别如下:

override(重写)
1、方法名(method name)、参数(parameter or signature)、返回值(return value)相同。
2、子类方法不能缩小父类方法的访问权限。
3、子类方法不能抛出比父类方法更多的异常(但子类方法可以不抛出异常)。
4、存在于父类和子类之间。
5、方法被定义为final不能被重写。

overload(重载)
1、参数类型(type)、个数(numbers)、顺序(orders)至少有一个不相同。  
2、不能重载只有返回值不同的方法,即different signature!!!!
3、存在于父类和子类、同类中。


做的选择题如下:

Which of the following statements about function overloading/redefinition/overriding is TRUE?  

A

 An overloaded function can have a different return type.  (重载函数可以有不同返回类型)

B

A redefined function can have a different return type. (重定义函数可以有不同返回类型)

C

 An overrided function can have a different return type.(重写函数可以有不同返回类型)

D

 Overloaded functions can have the same parameter list. (重载函数可以有相同参数列表)

我选了B,但正确答案应该是A

重定义或重写都是在派生类中对基类中函数的代替,应该沿用基函数中的返回类型。

而重载函数调用时的区别就在于不同的参数列表。


参考资料:

(重写和重定义)http://blog.csdn.net/lvsheng_bupt/article/details/7686993

(重写和重载)http://www.blogjava.net/hobby8062/archive/2006/10/31/78227.html





























展开阅读全文
打赏
0
2 收藏
分享
加载中
更多评论
打赏
0 评论
2 收藏
0
分享
返回顶部
顶部