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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© clinging 中级黑马   /  2016-4-27 11:37  /  2528 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

3黑马币
创建三个类,分别为(Animal,Dog,Person),其中Person和Dog需要继承Animal类
要求:
a:创建Animal类:必有属性:体重(单位是Kg)
b:创建Dog类:必有属性:状态(枚举类型:健康和生病两种状态)
c:创建Person类:必有属性:姓名
d:根据以下描述设计一套代理模式:实现一个照顾小狗的协议(protocol):当小狗的状态为生病的时候,小狗需要人类的照顾,让其状态变成健康

1 个回复

倒序浏览
  1. #import <Foundation/Foundation.h>

  2. // 定义一个枚举
  3. typedef NS_ENUM(NSInteger,Status){
  4.     Health, // 健康
  5.     sick // 生病
  6. };

  7. #pragma mark - 声明和实现一个动物类
  8. @interface Animal : NSObject
  9. // 体重
  10. @property(nonatomic,assign)CGFloat wheight;
  11. @end

  12. @implementation Animal
  13. @end

  14. // 声明照顾狗的代理协议
  15. @protocol DogDelegate <NSObject>
  16. // 照顾小狗的方法
  17. -(void)changeDogStutus;

  18. @end

  19. #pragma mark - 声明和实现一个狗类
  20. @interface Dog : Animal
  21. // 小狗生病或健康的属性
  22. @property(nonatomic,assign)Status status;
  23. // 照顾小狗的代理协议
  24. @property(nonatomic,weak)id<DogDelegate> delegate;
  25. @end


  26. @implementation Dog
  27. @end

  28. #pragma mark - 声明和实现一个人的类
  29. @interface Person : Animal<DogDelegate>
  30. // 人的名字
  31. @property(nonatomic,copy)NSString * name;
  32. // 人有一个宠物的属性
  33. @property(nonatomic,strong)Dog * myDog;


  34. @end


  35. @implementation Person
  36. // 实现代理协议的方法
  37. -(void)changeDogStutus{
  38.     // 将狗的状态设置为健康
  39.     self.myDog.status = Health;
  40. }

  41. @end



  42. int main(int argc, const char * argv[]) {
  43.     @autoreleasepool {
  44.         // 初始化对象
  45.         Dog * smallDog = [[Dog alloc] init];
  46.         Person * onePerson = [[Person alloc] init];
  47.         // 设置对象的属性值
  48.         smallDog.wheight = 30;
  49.         smallDog.delegate = onePerson;
  50.         
  51.         onePerson.name = @"小张";
  52.         onePerson.myDog = smallDog;
  53.         
  54.         // 让小狗生病
  55.         smallDog.status = sick;
  56.         
  57.         // 打印出小狗的状态
  58.         switch (smallDog.status) {
  59.             case 0:
  60.                 NSLog(@"小狗现在病好了");
  61.                 break;
  62.             case 1:
  63.                 NSLog(@"小狗现在生病了");
  64.                 break;
  65.             default:
  66.                 NSLog(@"小狗现在是求知状态");
  67.                 break;
  68.         }
  69.         
  70.         // 调用小狗的代理方法(照顾小狗)
  71.         [smallDog.delegate changeDogStutus];
  72.         
  73.         // 打印出小狗的状态
  74.         switch (smallDog.status) {
  75.             case 0:
  76.                 NSLog(@"小狗现在病好了");
  77.                 break;
  78.             case 1:
  79.                 NSLog(@"小狗现在生病了");
  80.                 break;
  81.             default:
  82.                 NSLog(@"小狗现在是求知状态");
  83.                 break;
  84.         }
  85.     }
  86.     return 0;
  87. }
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马