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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© dawn.dai 中级黑马   /  2014-4-24 23:18  /  1670 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

能不能举个例子说明一下多态的好处,什么情况下用多态?

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

6 个回复

倒序浏览
多态性(polymorphism)是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。不同对象以自己的方式响应相同的消息的能力叫做多态。意思就是假设生物类(life)都用有一个相同的 方法-eat;
那人类属于生物,猪也属于生物,都继承了life后,实现各自的eat,但是调用是我们只需调用各自的eat方法。
也就是不同的对象以 自己的方式响应了相同的消息。
多态的作用,就是为了类在继承和派生的时候,保证使用“家谱”中任一类的实例的某一属性时的正确调用。

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
多态指同一种操作作用于不同的对象,产生不同的结果。举个栗子。当函数的形式参数为父类。你就可以传入不同子类对象来使用不同子类的方法和属性。貌似越来越迷糊了?,,诶 表达能力有限。。。
回复 使用道具 举报
  1. void feed(Animal *a)  
  2. {  
  3.     [a eat];  
  4. }  
  5. int main( )  
  6. {  
  7.     Animal *aa = [Animal new];  
  8.     feed(aa);  
  9.     Dog *dd = [Dog new];  
  10.     feed(dd);  
  11.     return 0;  
  12. }
复制代码

Animal类和Dog类我就不写了,Dog类继承Animal类
如果用有一个Cat类继承Animal,那么cat的对象也可以调用feed函数
这样就可以看出多态的好处:上面的feed函数,如果参数中使用的是父类类型,可以传入父类、子类对象

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
假设设计一个绘图软件,所有的图形都继承于基类Shape,每种图形都有自己特定的绘制方法draw来实现。如果要显示所有图形,则可以创建一个基类Shape的集合,其元素分别指向个子类对象,然后循环调用父类类型对象的绘制方法,实际绘制根据当前赋值给她的子对象调用各自的绘制方法。如果要增加图形,只需要增加新的子类,并实现其绘制方法即可。

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 gmadong@163.com 于 2014-4-25 21:34 编辑

在oc中多态就是不同对象对同一消息的不同响应
//定义一个人的类再定义一个方法
@interface Person : NSObject
-(void)eat;
@end

//在学生类中你可以重写“吃”的方法也可以不重写(不重写那跟父类的吃的行为一样,而重写又可以写自己特有的)
//好处:多态使项目的代码重用和提高程序的扩展性
@interface Student : Person

@end


评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
多态其实就是通过继承实现的不同对象调用相同的方法,表现出不同的行为的一种设计模式。通过继承的方式,子类会实现或重新父类的方法,不同的子类可以在各自的相同方法中有不同的代码内容。如父类是duck中有jiao()这个方法,如果两个不同的鸭子子类,实现的jiao()这个方法可以是不同的。

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

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