黑马程序员技术交流社区

标题: 面向对象特性 ——多态 [打印本页]

作者: aludiba    时间: 2015-7-22 19:15
标题: 面向对象特性 ——多态
有了继承就会有多态。多态指的是某一事物的多种形态。比如说汽车有巴士、suv、赛车等等。在具体的应用中就是用父类指针指向子类。在运行时编译器会动态检测对象的真实形态。多态的好处是当我们写一个方法或者函数时如果它的参数有多种形态,那么我们只需要添加它们的父类做参数就可以了,可以节省不少代码。
作者: aludiba    时间: 2015-7-22 19:16
  1. #import <Foundation/Foundation.h>
  2. @interface Animal : NSObject//设计个动物类
  3. @property double weight;
  4. @property int age;
  5. @end
  6. @implementation Animal
  7. - (void)sleep
  8. {
  9.     NSLog(@"睡觉了");
  10. }
  11. - (void)eat
  12. {
  13.     NSLog(@"吃食物");
  14. }
  15. @end
  16. @interface Dog : Animal//设计个狗类继承自动物类
  17. - (void)cry;
  18. @end
  19. @implementation Dog
  20. - (void)cry
  21. {
  22.     NSLog(@"汪汪大叫");
  23. }
  24. @end
  25. @interface Cat : Animal//设计个猫类继承自动物类
  26. - (void)catch;
  27. @end
  28. @implementation Cat
  29. - (void)catch
  30. {
  31.     NSLog(@"抓老鼠");
  32. }
  33. @end
  34. void cage(Animal *animal)//编写一个函数实现将动物关进笼子里的功能
  35. {
  36.     NSLog(@"关进笼子里");
  37. }
  38. int main()
  39. {
  40.     Animal *a1 = [Animal new];//实例化一个动物对象
  41.     [a1 eat];//动物吃食
  42.     Animal *a2 = [Dog new];//动物指针指向狗对象,多态特性
  43.     [a2 cry];/*让狗叫,这里编译器会发出一个警告,但是仍然可以编译通过因为在运行时电脑会动态检测a2所指对象的真实形态以让其调用其方法,这里也可以将a2的类型强制转换为Dog类型:[(Dog *)a2 cry]*/
  44.     Cat *c = [Cat new];//实例化一个猫对象
  45.     [c catch];//让猫抓老鼠
  46.     cage(a1);//把动物关进笼子里
  47.     cage(a2);//把用动物指针指的狗关进笼子里
  48.     cage(c);//直接将猫对象关进笼子里
  49.     return 0;
  50. }
复制代码

作者: 段培峰    时间: 2015-7-22 20:11
每日一回!!!




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