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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© clinging 中级黑马   /  2016-4-26 17:48  /  1599 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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

4 个回复

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

  2. @interface Animal : NSObject

  3. @property(nonatomic,assign) double weight;

  4. @end
复制代码


Person类
  1. #import "Animal.h"
  2. #import "DogDelegate.h"
  3. @interface Person : Animal<DogDelegate>

  4. @property(nonatomic,copy) NSString *name;
  5. @end
  6. #import "Person.h"

  7. @implementation Person

  8. -(void)cureDog{
  9.     NSLog(@"狗狗在%@的精心照顾下好了",_name);
  10. }
  11. @end
复制代码

回复 使用道具 举报
Dog类
  1. #import "Animal.h"
  2. #import "DogDelegate.h"
  3. //枚举
  4. typedef enum{
  5.     HEALTH,SICK
  6. } Status;

  7. @interface Dog : Animal

  8. @property(nonatomic,assign) id<DogDelegate> delegate;
  9. @property(nonatomic,assign) Status status;
  10. //狗狗生病
  11. -(void)dogSick;

  12. @end
复制代码

Dog实现类
  1. #import "Dog.h"

  2. @implementation Dog

  3. #pragma mark -  重写status的set方法
  4. -(void)setStatus:(Status)status{
  5.     _status = status;
  6.     if (_status == SICK) {
  7.         [self dogSick];
  8.     }
  9. }

  10. -(void)dogSick{
  11.     NSLog(@"狗狗生病了");
  12.     [self cureDog];
  13. }

  14. -(void)cureDog{
  15.     [self.delegate cureDog];
  16. }
  17. @end
复制代码


协议类
  1. @protocol DogDelegate <NSObject>

  2. -(void)cureDog;

  3. @end
复制代码
回复 使用道具 举报
测试代码
  1. int main(int argc, const char * argv[]) {
  2.     @autoreleasepool {
  3. //        人
  4.         Person *p = [Person new];
  5.         p.name = @"小明";
  6.         p.weight = 55.0;
  7. //        狗
  8.         Dog *d = [Dog new];
  9.         d.weight = 10.0;
  10.         d.delegate = p;
  11. //       狗的状态
  12.         d.status = SICK;
  13.         
  14.     }
  15.     return 0;
  16. }
复制代码

点评

谢谢!  发表于 2016-4-28 12:40
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马