A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 管章鹏 中级黑马   /  2013-4-5 19:48  /  1465 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 管章鹏 于 2013-4-6 10:27 编辑

Override, Overload,的区别?
今天学了多态方面的知识,知道override是重写的意思,但是不太理解
Override和 Overload 的区别,以及她们各自的用法,请大神们给予解答
非常感谢!

评分

参与人数 1技术分 +1 收起 理由
苏波 + 1

查看全部评分

6 个回复

倒序浏览
      方法签名:①访问权限+②返回值的类型+③方法名+④参数列表+⑤抛出的异常。
      overload (重载):发生场所:同一个类里,或者子类中,例如构造函数。①访问权限,②返回值的类型,⑤抛出的异常(类型,数目)都与重载无关;③方法名必须相同; ④参数列表必须不同(参数的个数,类型,顺序) 。对于继承来说,如果某一方法在父类中是访问权限是private,那么就不能在子类对其进行重载,如果定义的话,也只是定义了一个新方法,而不会达到重载的效果。
      override(重写):发生场所:对接口方法的实现,或者在继承中子类覆盖父类的方法。①子类方法的访问权限只能比父类的更大,不能更小;②返回值的类型,③方法名,④参数列表(参数的个数,类型,顺序) 都必须相同;覆盖的方法所抛出的异常比被覆盖方法的所抛出的异常更少,或者一致,或者是其子类; 被覆盖的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行覆盖。

评分

参与人数 1技术分 +1 收起 理由
苏波 + 1

查看全部评分

回复 使用道具 举报
override的方法名、参数、返回值相同,子类方法的访问权限不能比父类的小,子类方法不能抛出比父类方法更多的异常,存在于父类和子类之间
overload的参数类型、个数、顺序至少有一个不相同

评分

参与人数 1技术分 +1 收起 理由
苏波 + 1

查看全部评分

回复 使用道具 举报
1、函数Override重载,主要发生在一个类当中,达到重载必须具备的条件是,方法名称一模一样,参数类型,参数个数,以及餐宿顺序不同,与返回值无关,即可满足重载。
2、函数Overload覆写,主要发生在两个类即子父类当中,子类的方法必须和父类中的方法一模一样,包括其返回值类型都必须相同,这样称为方法的覆写,也叫重写。
3、其中构造函数之间也有重载,但是唯一不能进行构造函数的重写,因为子父类中的构造方法不相同。
以上是我对重载和重写的理解,可能有出入,希望共同学习。。

评分

参与人数 1技术分 +1 收起 理由
苏波 + 1

查看全部评分

回复 使用道具 举报
重载(overload)是方法的名称相同。参数或参数类型不同,进行多次重载以适应不同的需要。比如Console.WriteLine()这个方法,我们可以传递string类型参数,也可以放int类型参数,这就是重载,重载(overload)是面向过程的概念。
Override 是进行基类中函数的重写。也就是覆盖父类方法的实现,Override 是面向对象的概念

评分

参与人数 1技术分 +1 收起 理由
苏波 + 1

查看全部评分

回复 使用道具 举报
HM朱百青 发表于 2013-4-6 00:03
重载(overload)是方法的名称相同。参数或参数类型不同,进行多次重载以适应不同的需要。比如Console.Writ ...

说的很明白,谢谢了哈
回复 使用道具 举报
管章鹏 发表于 2013-4-6 10:30
说的很明白,谢谢了哈

加油!大家共同进步:)
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马