OC面向对象的三大特征(封装 继承 多态)习题1
2015-07-13 10:37
701 查看
OC面向对象的三大特征
封装 继承 多态
封装
1)完整的说是成员变量的封装。)在成语方法里面的成员变量最好不要使用@public这样会直接暴露在外面被别人随随便便修改,封装的方法还可以达到过滤无效数据的作用。
2)对成员变量只读(readonly):只允许外界访问我的no,不允许外界修改我,只需要提供get方法。
3)对成员变量只写:不允许外界访问我的no,只允许外界修改我,只需要提供set get方法。
继承
1)继承的结构 @interface A : B (A 继承了B,相当于拥有了A里面的所有成员变量和方法)
2)继承的好处:
1> 抽取重复代码
2> 建立了类之间的关系
3> 子类可以拥有父类中的所有成员变量和方法
4> 基本上所有类的根类是NSObject
多态
1)多态:多种形态,父类指针指向子类对象,调用方法时会检测对象的真实形象。
1>没有继承就没有多态
2>代码的体现:父类类型的指针指向子类对象
3>好处:如果函数\方法参数中使用的是父类类型,可以传入父类、子类对象
注
1> [self 方法名]可以调用其他对象方法\类方法
习题1
打僵尸。需求:
定义普通僵尸类:实例变量:僵尸种类、僵尸总血量、僵尸每次失血量。方法:初始化、被打击失血、死亡。
定义路障僵尸类:实例变量:僵尸种类、僵尸总血量、僵尸每次失血量,道具,弱点。方法:初始化、被打击失血、失去装备、死亡。
定义铁桶僵尸类:实例变量:僵尸种类、僵尸总血量、僵尸每次失血量,道具,弱点。方法:初始化、被打击失血、失去装备、死亡。
For循环 模拟攻击,创建3个僵尸对象。
(1)、普通僵尸。总血量50,每次失血3.
(2)、路障僵尸。总血量80,有路障时,每次失血2,血量剩余一半时,失去路障,每次失血3.
(3)、铁桶僵尸。总血量120,有铁桶时,每次失血1,血量剩余1/3时,失去铁桶,每次失血3.
循环攻击过程中:每个僵尸被攻击时,输出本次丢失血量,剩余血量。丢失道具时,输出丢失的道具。僵尸死亡时,输出已死亡。
最后一个僵尸死亡时,攻击停止,循环结束。输出总攻击次数。
工程:
Ordinary.h
Ordinary.m
Roadblock.h
Roadblock.m
Bucket.h
Bucket.m
main.m
封装 继承 多态
封装
1)完整的说是成员变量的封装。)在成语方法里面的成员变量最好不要使用@public这样会直接暴露在外面被别人随随便便修改,封装的方法还可以达到过滤无效数据的作用。
2)对成员变量只读(readonly):只允许外界访问我的no,不允许外界修改我,只需要提供get方法。
3)对成员变量只写:不允许外界访问我的no,只允许外界修改我,只需要提供set get方法。
继承
1)继承的结构 @interface A : B (A 继承了B,相当于拥有了A里面的所有成员变量和方法)
2)继承的好处:
1> 抽取重复代码
2> 建立了类之间的关系
3> 子类可以拥有父类中的所有成员变量和方法
4> 基本上所有类的根类是NSObject
多态
1)多态:多种形态,父类指针指向子类对象,调用方法时会检测对象的真实形象。
1>没有继承就没有多态
2>代码的体现:父类类型的指针指向子类对象
3>好处:如果函数\方法参数中使用的是父类类型,可以传入父类、子类对象
注
1> [self 方法名]可以调用其他对象方法\类方法
习题1
打僵尸。需求:
定义普通僵尸类:实例变量:僵尸种类、僵尸总血量、僵尸每次失血量。方法:初始化、被打击失血、死亡。
定义路障僵尸类:实例变量:僵尸种类、僵尸总血量、僵尸每次失血量,道具,弱点。方法:初始化、被打击失血、失去装备、死亡。
定义铁桶僵尸类:实例变量:僵尸种类、僵尸总血量、僵尸每次失血量,道具,弱点。方法:初始化、被打击失血、失去装备、死亡。
For循环 模拟攻击,创建3个僵尸对象。
(1)、普通僵尸。总血量50,每次失血3.
(2)、路障僵尸。总血量80,有路障时,每次失血2,血量剩余一半时,失去路障,每次失血3.
(3)、铁桶僵尸。总血量120,有铁桶时,每次失血1,血量剩余1/3时,失去铁桶,每次失血3.
循环攻击过程中:每个僵尸被攻击时,输出本次丢失血量,剩余血量。丢失道具时,输出丢失的道具。僵尸死亡时,输出已死亡。
最后一个僵尸死亡时,攻击停止,循环结束。输出总攻击次数。
工程:
Ordinary.h
// // Ordinary.h // Play_Zombie // // Created by jesee on 15/7/12. // Copyright (c) 2015年 jesee. All rights reserved. // #import <Foundation/Foundation.h> @interface Ordinary : NSObject { NSString *_Name;//僵尸名 int _Allblood;//总血量 int _Lostblood;//正常掉血量 int _Propsblood;//有道具掉血量 int _temp;//中间量存总血量 } -(instancetype)initWithName:(NSString *)Name Allblood:(int)Allblood Lostblood:(int)Lostblood Propslood:(int)Propsblood; -(void)Lostlood; -(void)die; -(void)setAllblood:(int)Allblood; -(int)Allbood; @end
Ordinary.m
#import "Ordinary.h" @implementation Ordinary //初始化 -(instancetype)initWithName:(NSString *)Name Allblood:(int)Allblood Lostblood:(int)Lostblood Propslood:(int)Propsblood; { self = [super init]; if (self) { _Name=Name; _Allblood=Allblood; _Lostblood=Lostblood; _Propsblood=Propsblood; _temp=Allblood; } return self; } -(void)Lostlood { if (_Allblood>_Lostblood&&_Allblood>0) { _Allblood-=_Lostblood; NSLog(@"普通僵尸 本次丢失血量%d,剩余血量%d",_Lostblood,_Allblood); } else { NSLog(@"普通僵尸 本次丢失血量%d,剩余血量%d",_Allblood,0); [self die]; _Allblood-=_Allblood; } } -(void)die { NSLog(@"%@ die",_Name); } -(void)setAllblood:(int)Allblood { _Allblood=Allblood; } -(int)Allbood { return _Allblood; } @end
Roadblock.h
#import "Ordinary.h" @interface Roadblock : Ordinary -(void)LostProps; -(void)Lostlood; @end
Roadblock.m
#import "Roadblock.h" @implementation Roadblock -(void)LostProps { NSLog(@"Lost Roadblock"); } -(void)Lostlood { if (_Allblood>_Lostblood&&_Allblood>0) { if (_Allblood>_temp/2) { _Allblood-=_Propsblood; NSLog(@"路障僵尸 本次丢失血量%d,剩余血量%d",_Propsblood,_Allblood); } if (_Allblood<=_temp/2) { if (_Allblood==_temp/2) { [self LostProps]; } _Allblood-=_Lostblood; NSLog(@"路障僵尸 本次丢失血量%d,剩余血量%d",_Lostblood,_Allblood); } } else { NSLog(@"路障僵尸 本次丢失血量%d,剩余血量%d",_Allblood,0); [super die]; _Allblood-=_Allblood; } } @end
Bucket.h
#import "Ordinary.h" @interface Bucket : Ordinary -(void)LostProps; -(void)Lostlood; @end
Bucket.m
#import "Bucket.h" @implementation Bucket -(void)LostProps { NSLog(@"Lost Bucket"); } -(void)Lostlood { if (_Allblood>_Lostblood&&_Allblood>0) { if (_Allblood>_temp/3) { _Allblood-=_Propsblood; NSLog(@"铁桶僵尸 本次丢失血量%d,剩余血量%d",_Propsblood,_Allblood); } if (_Allblood<=_temp/3) { if (_Allblood==_temp/3) { [self LostProps]; } _Allblood-=_Lostblood; NSLog(@"铁桶僵尸 本次丢失血量%d,剩余血量%d",_Lostblood,_Allblood); } } else { NSLog(@"铁桶僵尸 本次丢失血量%d,剩余血量%d",_Allblood,0); [super die]; _Allblood-=_Allblood; } } @end
main.m
#import <Foundation/Foundation.h> #import "Ordinary.h" #import "Roadblock.h" #import "Bucket.h" int main(int argc, const char * argv[]) { @autoreleasepool { Ordinary *p1=[[Ordinary alloc]initWithName:@"普通僵尸" Allblood:50 Lostblood:3 Propslood:0]; Roadblock *p2=[[Roadblock alloc]initWithName:@"路障僵尸" Allblood:80 Lostblood:3 Propslood:2]; Bucket *p3=[[Bucket alloc]initWithName:@"铁桶僵尸" Allblood:120 Lostblood:3 Propslood:1]; int count=0; while (1) { if ([p1 Allbood]>0) { [p1 Lostlood];count++; } if ([p2 Allbood]>0) { [p2 Lostlood];count++; } if ([p3 Allbood]>0) { [p3 Lostlood];count++; } if ([p1 Allbood]==0&&[p2 Allbood]==0&&[p3 Allbood]==0) { break; } } NSLog(@"总攻击次数%d",count);
相关文章推荐
- HDU 1075 What Are You Talking About (strings)
- goquery 添加header 发起请求
- Java学习笔记(2015.7.6~10)
- linux 下配置 resin+nginx
- Linux下ps命令详解
- POJ 3278 && HDU 2717 Catch That Cow(bfs)
- 利用ActionFilterAttribute来判断用户是否登陆等等
- HYSBZ 1013: [JSOI2008]球形空间产生器sphere(高斯消元啊 模板)
- 快速排序
- C#静态构造函数
- linux命令学习DAY.2
- [转]Java中要注意的几个问题
- 去掉按钮默认边距(非padding)
- Android编译系统详解(二)
- linux(centos)搭建SVN服务器
- 使用RedisTemplate的操作类访问Redis(转)
- 小米公司研报:能否完成8000万台销售目标?
- 数据结构与算法——插入类排序(直接插入排序,希尔排序)
- 深入理解Java内存模型系列篇
- Object-C非正式协议与正式协议的区别