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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 安若曦 于 2015-9-11 13:59 编辑




大家问我就来说说:

  1. #import <Foundation/Foundation.h>
  2. /*
  3. 多态的概念:

  4. 不同的对象用自己的方式响应相同名称方法的能力就称之为多态。


  5. 体现出来:

  6. 父类的指针指向子类对象


  7. 多态条件:

  8. 有继承关系,

  9. 有方法重写(子类把父类的同名方法给重写了)

  10. */



  11. @interface Animal : NSObject
  12. -(void)run;
  13. @end



  14. @implementation Animal
  15. -(void)run{
  16.     NSLog(@"动物在跑");
  17. }
  18. @end

  19. //Dog类继承了Animal类,Animal是Dog的父类
  20. @interface Dog : Animal
  21. -(void)run;  //这句话可以不写
  22. -(void)eat;
  23. @end

  24. @implementation Dog
  25. //重写了父类的run方法
  26. -(void)run{
  27.     NSLog(@"狗以80码的速度冲出去,没撞树上");
  28. }
  29. //自己增加了新的方法
  30. -(void)eat{
  31.     NSLog(@"狗在吃东西");
  32. }
  33. @end

  34. //Cat类继承了Animal类,Animal也是Cat的父类
  35. @interface Cat : Animal

  36. @end


  37. @implementation Cat
  38. //重写父类的run方法
  39. -(void)run{
  40.     NSLog(@"猫在爬树");
  41. }
  42. @end


  43. int main(int argc, const char * argv[]) {
  44.     @autoreleasepool {
  45.         
  46.         //没有使用多态
  47.         Animal *animal = [Animal new];
  48.         
  49.         [animal run]; //输出结果:动物在跑
  50.         
  51.         
  52.         
  53.         //*********  使用多态 ********
  54.         
  55.         //父类指针指向  子类对象
  56.         
  57.         Animal *a2 = [Dog new];

  58.         [a2 run];    //打印结果:狗以80码的速度冲出去,没撞树上


  59.         Animal *a3 = [Cat new];

  60.         [a3 run];    //打印结果:猫在爬树
  61.         
  62.         
  63.         //******** 多态使用注意 ************
  64.         
  65.         Animal *ani6 = [Dog new];
  66.         //ani6 是 animal 类型
  67.         //编译器会报错
  68.         //        [ani6 eat];     //错误的
  69.         //(Dog *)ani6   这句话是把 ani6 强制转换为 dog 类型
  70.         [(Dog *)ani6 eat];  //正确的
  71.         
  72.         //
  73.         Animal *a8 = [Animal new];
  74.         //        [a8 eat];      //这样是错误的用法
  75.         //        [(Dog *)a8 eat];  //这样也是不对的
  76.         
  77.         

  78.     }
  79.     return 0;
  80. }
复制代码






2 个回复

倒序浏览
楼主辛苦了! 赞下。
回复 使用道具 举报
叼叼叼~~~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马