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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 鲁中需 中级黑马   /  2012-10-26 10:51  /  1543 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

昨天在论坛中碰到一个问题“Overload和Override是多态性的表现?这怎么理解.... ”,之前开过一学期的C++课程,里面说的很清楚,重载是多态的一种形式,我就按C++中的理论给他回答了,后来有人说没有继承就没有覆盖,我就翻java编程思想,看看相关章节怎么说的,讲多态是没提到重载,说重载是也没提到多态,好像二者之间没什么关系,疑惑,求解。

评分

参与人数 1技术分 +1 收起 理由
韩军博 + 1 神马都是浮云

查看全部评分

2 个回复

倒序浏览
我觉的重载和多态没什么关系吧,重载只是一个类中方法名一样,后面参数不同。而重写是子类继承父类,子类的方法名,参数个数类型都和父类一样。而多态是父类的引用指向子类对象。我理解父类的引用指向子类对象,他可以调用子类的方法。而子类的方法又是重写父类的方法,就是这种联系吧
回复 使用道具 举报
程杰 发表于 2012-10-26 11:33
我觉的重载和多态没什么关系吧,重载只是一个类中方法名一样,后面参数不同。而重写是子类继承父类,子类的 ...

嗯,在java中应该不把它归为多态的一种吧,但在C++中它的确是多态的一种形式。后来我在百度百科上看到关于重载有两种说法。重载(百度百科)
第一种说法
  重载是一种多态(如C++),有四种形式的多态:
  1.虚函数多态
  2模板多态
  3重载
  4转换
  所谓的动态和静态区分是另一种基于绑定时间的多态分类,严格来说,重载是编译时多态,即静态多态,根据不同类型函数编译时会产生不同的名字如int_foo和char_foo等等,以此来区别调用。故重载仍符合多态定义——通过单一标识支持不同特定行为的能力,只是重载属于静态多态,而不是通过继承和虚函数实现的动态多态。
第二种说法
  重载(overload)和多态无关,真正和多态相关的是覆盖(override)。
  当派生类重新定义了基类的虚拟方法后,基类根据赋给它的不同的派生类引用,动态地调用属于派生类的对应方法,这样的方法调用在编译期间是无法确定的。因此,这样的方法地址是在运行期绑定的(动态绑定)。
  重载只是一种语言特性,是一种语法规则,与多态无关,与面向对象也无关。
  不过针对所谓的第二种重载,有一个专门的名词--重写或重定义。重载与重写的区别就在于是否覆盖,重写一般多发生在不同的类且存在继承关系之间,而重载多是在一个类里或者一块代码段里。

评分

参与人数 1技术分 +1 收起 理由
谭立文 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马