黑马程序员技术交流社区

标题: 多态 [打印本页]

作者: dawn.dai    时间: 2014-4-24 23:18
标题: 多态
能不能举个例子说明一下多态的好处,什么情况下用多态?
作者: 魅影穿眸    时间: 2014-4-24 23:32
多态性(polymorphism)是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。不同对象以自己的方式响应相同的消息的能力叫做多态。意思就是假设生物类(life)都用有一个相同的 方法-eat;
那人类属于生物,猪也属于生物,都继承了life后,实现各自的eat,但是调用是我们只需调用各自的eat方法。
也就是不同的对象以 自己的方式响应了相同的消息。
多态的作用,就是为了类在继承和派生的时候,保证使用“家谱”中任一类的实例的某一属性时的正确调用。
作者: gaoxinglei123    时间: 2014-4-24 23:40
多态指同一种操作作用于不同的对象,产生不同的结果。举个栗子。当函数的形式参数为父类。你就可以传入不同子类对象来使用不同子类的方法和属性。貌似越来越迷糊了?,,诶 表达能力有限。。。
作者: 李烨    时间: 2014-4-24 23:45
  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函数,如果参数中使用的是父类类型,可以传入父类、子类对象
作者: 恣意    时间: 2014-4-25 16:26
假设设计一个绘图软件,所有的图形都继承于基类Shape,每种图形都有自己特定的绘制方法draw来实现。如果要显示所有图形,则可以创建一个基类Shape的集合,其元素分别指向个子类对象,然后循环调用父类类型对象的绘制方法,实际绘制根据当前赋值给她的子对象调用各自的绘制方法。如果要增加图形,只需要增加新的子类,并实现其绘制方法即可。
作者: gmadong@163.com    时间: 2014-4-25 21:29
本帖最后由 gmadong@163.com 于 2014-4-25 21:34 编辑

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

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

@end



作者: 李鹏-ios    时间: 2014-4-26 23:18
多态其实就是通过继承实现的不同对象调用相同的方法,表现出不同的行为的一种设计模式。通过继承的方式,子类会实现或重新父类的方法,不同的子类可以在各自的相同方法中有不同的代码内容。如父类是duck中有jiao()这个方法,如果两个不同的鸭子子类,实现的jiao()这个方法可以是不同的。




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