黑马程序员——OC面向对象三大特性——封装,继承,多态。

----------------------  ASP.Net+Unity开发 .Net培训 、期待与您交流! ----------------------





一.封装:

不再使用@public使成员变量可以直接访问。

set方法:

[objc]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. /*方法名以set开头;setAge首字母大写;返回值一定是void;一定要接收一个和成员变量类型一样的参数;形参和成员变量名要不一样,成员变量名使用下划线_开头。*/  
  2. 声明:    
  3. - (void) setAge:(int)age;    
  4. 实现:    
  5. -(void)setAge:(int)age    
  6. {   if(age<=0)    
  7.     {   age=1;  }    
  8.     _age=age;    
  9. }    
  10. 调用:    
  11. [stu setAge:10];   
get方法:

[objc]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. /*命名规范:必须要有返回值且与成员变量类型一致; 
  2. 方法名和成员变量一致;不用接受任何参数;*/  
  3. 声明:    
  4. - (int)age;    
  5. 实现:    
  6. - (int)age    
  7. {   return _age;    }  //  
  8. 调用:    
  9. [stu age];    

继承:


定义

[objc]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. /*抽取重复代码 
  2.   建立类之间的关系 
  3.   子类可以拥有父类中的所有成员变量和方法 
  4.   所有类的根类是NSObject ,NSProxy不常用*/  
  5. 声明:动物类    
  6. @interface Animal : NSObject   //动物继承类NSObject    
  7. {    
  8.     int _age;    
  9.     double _weight;    
  10. }    
  11. - (void)setAge:(int) age;    
  12. - (int)age;    
  13. - (void)setWeight:(double)weight;    
  14. - (double)weight;    
  15. @end    
  16. 实现:    
  17. @implementation Animal    
  18. ......    
  19. @end    
  20. 声明 :狗类    
  21. @interface Dog : Animal;  //狗继承类Animal,相当于拥有了Animal里面的所有成员变量和方法。    
  22. @end    

使用原则

[objc]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. /*父类的声明需要写在子类声明之前 
  2.  子类和父类不能有相同的成员变量  
  3.  子类方法可以与父类名相同,调用的时候优先去当前的类中找,没有就去父类里找。子类可以用一个相同的方法名来重写父类的方法。  
  4. 在某些场合,虽然双方都具有继承逻辑特征,但是,并不适合,这时候需要组合而不是继承*/  
  5. @interface Score : NSObject    
  6. {    
  7.     int  _cScore;    
  8.     int  _ocScore;    
  9. }    
  10. @end    
  11. @implementation Score    
  12. @end    
  13. //继承:XX是一个XXX    
  14. //组合:XX 拥有 XXX    
  15. @interface Student : NSObject//理论上确实可以继承Score@interface Student : Score,但是不符合道理,此时就要用到组合    
  16. {    
  17.     Score *score;//组合:把Score当成Student的一部分---->学生拥有成绩    
  18.     //int  _cScore;    
  19.     //int  _ocScore;    
  20.     int _age;    
  21. }    
  22. @end    
  23. @implementation Student    
  24. @end    

多态:

[objc]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. /*  
  2.  1.没有继承就没有多态  
  3.  2.代码的体现:父类类型的指针指向子类对象  
  4.  3.好处:如果函数\方法参数中使用的是父类类型,可以传入父类、子类对象  
  5.  4.局限性:  
  6.  1> 父类类型的变量 不能 直接调用子类特有的方法。必须强转为子类类型变量后,才能直接调用子类特有的方法  
  7.  */    
  8.     
  9. // 动物    
  10. @interface Animal : NSObject    
  11. - (void)eat;    
  12. @end    
  13.     
  14. @implementation Animal    
  15. - (void)eat    
  16. {    
  17.     NSLog(@"Animal-吃东西----");    
  18. }    
  19. @end    
  20.     
  21. // 狗    
  22. @interface Dog : Animal    
  23. - (void)run;    
  24. @end    
  25.     
  26. @implementation  Dog    
  27. - (void)run    
  28. {    
  29.     NSLog(@"Dog---跑起来");    
  30. }    
  31. - (void)eat    
  32. {    
  33.     NSLog(@"Dog-吃东西----");    
  34. }    
  35. @end    
  36.     
  37. // 猫    
  38. @interface Cat : Animal    
  39.     
  40. @end    
  41.     
  42. @implementation Cat    
  43. - (void)eat    
  44. {    
  45.     NSLog(@"Cat-吃东西----");    
  46. }    
  47. @end    
  48.     
  49.     
  50.     
  51. // 如果参数中使用的是父类类型,可以传入父类、子类对象    
  52. void feed(Animal *a)    
  53. {    
  54.     [a eat];    
  55. }    
  56.     
  57. int main()    
  58. {    
  59.     Animal *aa = [Dog new];  
  60.     //[aa run];  多态的局限性:父类类型的变量 不能 用来调用子类的方法  
  61.     // 将aa转为Dog *类型的变量</span>    
  62.     Dog *dd = (Dog *)aa;    
  63.     [dd run];    
  64.     // 多种形态    
  65.     //Dog *d = [Dog new]; // Dog类型    
  66.     // 多态:父类指针指向子类对象    
  67.     Animal *a = [Dog new];    
  68.     
  69.     // 调用方法时会检测对象的真实形象    
  70.     [a eat];    
  71.     
  72.   return 0;   
  73. }  









----------------------  ASP.Net+Unity开发 .Net培训 、期待与您交流! ----------------------
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值