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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 没壳的蜗牛 中级黑马   /  2014-5-25 13:49  /  16346 人查看  /  73 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 没壳的蜗牛 于 2014-5-26 10:28 编辑

多态是什么东东,真的很难理解啊!:'(谁能具体说说啊!

73 个回复

倒序浏览
多态==晚绑定。

不要把函数重载理解为多态。

因为多态是一种运行期的行为,不是编译期的行为。

多态:父类型的引用可以指向子类型的对象。

比如 Parent p = new Child();

当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误;

如果有,再去调用子类的该同名方法。

如果想要调用子类中有而父类中没有的方法,需要进行强制类型转换,如上面的例子中,将p转换为子类Child类型的引用。

因为当用父类的引用指向子类的对象,用父类引用调用方法时,找不到父类中不存在的方法。这时候需要进行向下的类型转换,将父类引用转换为子类引用。     

点评

可以,讲的很清楚  发表于 2016-5-21 16:10
可以,可以  发表于 2015-1-3 10:49
很不错!  发表于 2014-7-15 09:46

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

回复 使用道具 举报 10 0
多态你可以理解成物质的多种形态,比如人,有男人,女人,食物有鱼类,青菜类等等,你用的时候记住子类能够自动的转换成父类类型,而父类则需强转为子类类型

点评

这个算是对上面那个例子的补充,很好  发表于 2016-3-21 12:56
回复 使用道具 举报
2楼很有道理
回复 使用道具 举报
多态可以理解为 一个事物,多种表现形态。

比如一个老师(好比java中一个类,一个描述老师的类),在学生面前他以老师的形态存在,
而在他孩子面前以父亲的形式存在,在他妻子面前则以老公的形式存在。。
也就是说在java中可以用父类类型的引用指向子类类型
  例如:   Object obj=new String("a");
     obj为父类类型引用,用obj指向了子类对象String。
  而不用多态时,都这样写。
               String s=new String("a");
  即用本类类型引用指向本类类型实例。
   

点评

看完原来实例不清楚的地方理解了,谢了  发表于 2015-9-29 10:53
回复 使用道具 举报
事物的多种表现形态,再看一遍多台的视频肯定就明白了!
回复 使用道具 举报
简单来说,多态是具有表现多种形态的能力的特征,就像是橡皮泥,有可以捏成很多形状的能力。在OO中是指,语言具有根据对象的类型以不同方式处理之,特别是重载方法和继承类这种形式,的能力。多态被认为是面向对象语言的必备特性。多态实际上就是泛型。
泛型就是指我们不为特定的类型进行专门编码,而采用对不同类型进行通用编码的方式,无论是数据结果还是算法。
回复 使用道具 举报
大bao 中级黑马 2014-5-25 19:15:48
8#
引用别人的解析,详情见论文。个人觉得这样理解起来比较好:假设有一个“小提琴演奏者”类,有一个“钢琴演奏者”类,还有一个“萨克斯演奏者”类。它们都是弹奏乐器的,都继承自“乐器演奏者”类。“乐器演奏者”类有个方法叫做“演奏”。3 种不同的子类有不同的“演奏”方法实现(拉、弹、吹)。
那么指挥家如果要指挥一个交响乐,有两个办法:
(1) 分别是“小提琴拉起来”、“钢琴弹起来”、“萨克斯吹起来”。
(2) 只需要说一句“乐器们都演奏起来”。显然第一种方法是很笨拙的。因为指挥家不需要知道每种乐器演奏者具体怎么样去演奏乐器(是吹还是弹还是拉),只需要指挥就可以了。因此应当采用第二种做法。

Java中多态性之解析.pdf

132.89 KB, 下载次数: 1320

点评

这个例子举的好  发表于 2016-3-21 12:54
此处应该有掌声。。。  发表于 2015-4-1 19:52
很形象 很好理解!  发表于 2014-7-15 09:47

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

回复 使用道具 举报 4 0
多态的概述:某一类事物的多种存在的多种形态。
其实我们生活中有很多地方也是用到多态的,比如生活的角色扮演,是儿子的话,看到爸爸应该叫爸爸,是学生看到老师,应该叫老师,我们在身份时时刻刻在进行不断的变化,这就是多态。
回复 使用道具 举报
多肽简单的说就是一种事物多种表现形态,比如说你看见一个女,你可以叫她小姐,女孩,美女等都可以,就是你妈可以叫你是孩子,你爷爷可以叫你是孙子,你同学可以叫你是某某同学等。
回复 使用道具 举报
27ZJQ 中级黑马 2014-5-30 23:41:07
11#
大bao 发表于 2014-5-25 19:15
引用别人的解析,详情见论文。个人觉得这样理解起来比较好:假设有一个“小提琴演奏者”类,有一个“钢琴演 ...

这个解释好!
回复 使用道具 举报
父类型的引用可以指向子类型的对象
回复 使用道具 举报
好处:可以无限的扩展子类
  
  A. 父类或者接口指向自己的子类对象
     Fu f = new Zi();  
  B. 调用方法的时候,运行的是子类重写后的方法
  C. 调用成员变量的时候,运行的是父类的成员变量
  D. 在多态中,只能调用子类父类共有方法,不能调用子类的特有方法!!多态的弊端
  E. 调用子类特有方法,必须进行类型的强制转换,将提升为父类类型的子类对象,转回子类的类型,手动!!
  F. 保证程序的安全性,避免发生类型转换异常ClassCastException,采用instancof运算符,进行健壮性判断
g    非静态的成员方法,编译看左边,运行看右边
        其他情况,编译运行全看左边
回复 使用道具 举报 1 0
多态是面向对象的重要特性,简单点说:“一个接口,多种实现”,就是同一种事物表现出的多种形态。
回复 使用道具 举报
路过,来看看..
回复 使用道具 举报
多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。多态有两种表现形式:重载和覆盖,重载(overload),是发生在同一类中。与什么父类子类、继承毫无关系。  覆盖(override),是发生在子类中!也就是说必须有继承的情况下才有覆盖发生。
回复 使用道具 举报 1 0
我是来凑热热闹闹的,你这样问可不好,如果非要给个建议,就是回家好好看毕老师的视频
回复 使用道具 举报
2楼解释,漂亮啊
回复 使用道具 举报
学习了。。。。
回复 使用道具 举报
现在我也看到多态,确实有点难以理解
回复 使用道具 举报
1234下一页
您需要登录后才可以回帖 登录 | 加入黑马