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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

Person.h
  1. #import <Foundation/Foundation.h>

  2. @interface Person : NSObject //人类,用有年龄属性
  3. {
  4.     int _age;
  5. }
  6. - (void)setAge:(int)age;
  7. - (int)age;

  8. @end
复制代码

Person.m
  1. #import "Person.h"

  2. @implementation Person

  3. - (void)setAge:(int)age
  4. {
  5.     if(age > 0)
  6.     {
  7.         _age = age;
  8.     }
  9. }

  10. - (int)age
  11. {
  12.     return _age;
  13. }

  14. @end
复制代码

Score.h
  1. #import <Foundation/Foundation.h>

  2. @interface Score : NSObject //分数类
  3. {
  4.     int _CScore;    //C语言成绩
  5.     int _OCScore;   //OC成绩
  6. }

  7. - (void)setCScore:(int)CScore;
  8. - (int)CScore;

  9. - (void)setOCScore:(int)OCScore;
  10. - (int)OCScore;

  11. @end
复制代码

Score.m
  1. #import "Score.h"

  2. @implementation Score

  3. - (void)setCScore:(int)CScore
  4. {
  5.     if(CScore >= 0)
  6.     {
  7.         _CScore = CScore;
  8.     }
  9. }

  10. - (int)CScore
  11. {
  12.     return _CScore;
  13. }

  14. - (void)setOCScore:(int)OCScore
  15. {
  16.     if(OCScore >= 0)
  17.     {
  18.         _OCScore = OCScore;
  19.     }
  20. }
  21. - (int)OCScore
  22. {
  23.     return _OCScore;
  24. }

  25. @end
复制代码

Student.h
  1. #import "Person.h"
  2. #import "Score.h"

  3. @interface Student : Person //学生类Student,继承自人类Person,组合了分数属性Score
  4. {
  5.     Score *_score;
  6. }
  7. - (void)setScore:(Score *)score;
  8. - (Score *)score;

  9. @end
复制代码

Student.m
  1. #import "Student.h"

  2. @implementation Student
  3. - (void)setScore:(Score *)score
  4. {
  5.     _score = score;
  6. }

  7. - (Score *)score
  8. {
  9.     return _score;
  10. }
  11. @end
复制代码

main.m
  1. /*
  2. 继承:
  3. @interface 子类名 : 父类名
  4. //成员变量、方法的声明
  5. @end

  6. * 子类继承了父类,就相当于拥有了父类中声明的所有成员变量和方法,父类的属性和方法可以在子类中访问
  7. * 通常将多种相似的对象具有的共同特征提取到父类中

  8. 继承、组合的合理使用:
  9. 继承:子类是父类的一种,比如说Student是Person
  10. 组合:对象拥有某种属性,比如说Student拥有Score类型的属性

  11. 如果Student类继承Score类,再组合一个Person属性,也能实现功能,但是不合常理。
  12. */

  13. #import <Foundation/Foundation.h>
  14. #import "Score.h"
  15. #import "Person.h"
  16. #import "Student.h"

  17. int main(int argc, const char * argv[])
  18. {
  19.     Score *sco = [Score new];
  20.     [sco setCScore:99];
  21.     [sco setOCScore:88];
  22.    
  23.    
  24.     Student *s = [Student new];
  25.     [s setAge:22];
  26.     [s setScore:sco];
  27.    
  28.     NSLog(@"_age = %d , _CScore = %d , _OCScore = %d" , [s age] , [[s score] CScore] , [[s score] OCScore]); //子类访问父类的_age属性
  29.     //输出:_age = 22 , _CScore = 99 , _OCScore = 88
  30.    
  31.     return 0;
  32. }
复制代码



0 个回复

您需要登录后才可以回帖 登录 | 加入黑马