黑马程序员技术交流社区

标题: 多态 [打印本页]

作者: 管章鹏    时间: 2013-4-5 19:48
标题: 多态
本帖最后由 管章鹏 于 2013-4-6 10:27 编辑

Override, Overload,的区别?
今天学了多态方面的知识,知道override是重写的意思,但是不太理解
Override和 Overload 的区别,以及她们各自的用法,请大神们给予解答
非常感谢!
作者: 张正强    时间: 2013-4-5 20:14
      方法签名:①访问权限+②返回值的类型+③方法名+④参数列表+⑤抛出的异常。
      overload (重载):发生场所:同一个类里,或者子类中,例如构造函数。①访问权限,②返回值的类型,⑤抛出的异常(类型,数目)都与重载无关;③方法名必须相同; ④参数列表必须不同(参数的个数,类型,顺序) 。对于继承来说,如果某一方法在父类中是访问权限是private,那么就不能在子类对其进行重载,如果定义的话,也只是定义了一个新方法,而不会达到重载的效果。
      override(重写):发生场所:对接口方法的实现,或者在继承中子类覆盖父类的方法。①子类方法的访问权限只能比父类的更大,不能更小;②返回值的类型,③方法名,④参数列表(参数的个数,类型,顺序) 都必须相同;覆盖的方法所抛出的异常比被覆盖方法的所抛出的异常更少,或者一致,或者是其子类; 被覆盖的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行覆盖。
作者: 火麒麟    时间: 2013-4-5 20:18
override的方法名、参数、返回值相同,子类方法的访问权限不能比父类的小,子类方法不能抛出比父类方法更多的异常,存在于父类和子类之间
overload的参数类型、个数、顺序至少有一个不相同
作者: _王涛    时间: 2013-4-5 20:18
1、函数Override重载,主要发生在一个类当中,达到重载必须具备的条件是,方法名称一模一样,参数类型,参数个数,以及餐宿顺序不同,与返回值无关,即可满足重载。
2、函数Overload覆写,主要发生在两个类即子父类当中,子类的方法必须和父类中的方法一模一样,包括其返回值类型都必须相同,这样称为方法的覆写,也叫重写。
3、其中构造函数之间也有重载,但是唯一不能进行构造函数的重写,因为子父类中的构造方法不相同。
以上是我对重载和重写的理解,可能有出入,希望共同学习。。

作者: HM朱百青    时间: 2013-4-6 00:03
重载(overload)是方法的名称相同。参数或参数类型不同,进行多次重载以适应不同的需要。比如Console.WriteLine()这个方法,我们可以传递string类型参数,也可以放int类型参数,这就是重载,重载(overload)是面向过程的概念。
Override 是进行基类中函数的重写。也就是覆盖父类方法的实现,Override 是面向对象的概念
作者: 管章鹏    时间: 2013-4-6 10:30
HM朱百青 发表于 2013-4-6 00:03
重载(overload)是方法的名称相同。参数或参数类型不同,进行多次重载以适应不同的需要。比如Console.Writ ...

说的很明白,谢谢了哈
作者: HM朱百青    时间: 2013-4-6 13:22
管章鹏 发表于 2013-4-6 10:30
说的很明白,谢谢了哈

加油!大家共同进步:)




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