黑马程序员技术交流社区
标题: 构造方法重写的应用 [打印本页]
作者: 翟宇浩 时间: 2015-9-8 22:10
标题: 构造方法重写的应用
本帖最后由 翟宇浩 于 2015-9-8 22:17 编辑
init 方法就是构造方法,是用来初始化对象,初始化完成后成员变量的值都是0.
alloc 为该类分配内存空间,以存放该类的全部实例变量,还将这块内存区域全部初始化为0.
例如: Person *p = [[Person alloc] init]; 相当于 Person *p = [Person new];
应用:先在有5个士兵,每个士兵都拥有一把枪,每把枪有5发子弹,每人都可以开枪
类:Solider 类:Gun
属性:枪 属性:子弹
行为:开枪 行为:射击
Gun.h
#import <Foundation/Foundation.h>
@interface Gun : NSObject
@property int bulletCount; //声明属性
-(void)shoot;
@end
Gun.m
#import "Gun.h"
@implementation Gun
//重写构造方法,让子弹数初始化时就是5个
-(instancetype)init{
if (self = [super init]) {
_bulletCount = 5;
}
return self;
}
-(void)shoot{
if (_bulletCount>0) {
_bulletCount--;//每射击一次,减少一枚子弹
NSLog(@"枪在射击,剩余子弹 %d",_bulletCount);
}else{
NSLog(@"枪没子弹了");
}
}
@end
Solider.h
#import <Foundation/Foundation.h>
#import "Gun.h"
@interface Solider : NSObject
@property Gun *gun; //让Solider拥有Gun的属性
-(void)fire;
@end
Solider.m
#import "Solider.h"
@implementation Solider
-(void)fire{
[_gun shoot]; //士兵开火时是使用枪进行射击
}
//每次创建Solider的对象时都给士兵配上枪
-(instancetype)init{
if (self = [super init]) {
Gun *gun = [Gun new];
_gun = gun;
}
return self;
}
@end
main.m
#import <Foundation/Foundation.h>
#import "Solider.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
//利用for循环,让每个士兵都拥有自己的枪,射击时消耗的是自己的子弹
for (int i = 0; i<5; i++) {
Solider *s1 = [Solider new];
[s1 fire];
[s1 fire];
}
}
return 0;
}
运行结果为:
枪在射击,剩余子弹 4
枪在射击,剩余子弹 3
枪在射击,剩余子弹 4
枪在射击,剩余子弹 3
枪在射击,剩余子弹 4
枪在射击,剩余子弹 3
枪在射击,剩余子弹 4
枪在射击,剩余子弹 3
枪在射击,剩余子弹 4
枪在射击,剩余子弹 3
作者: Residual_mem 时间: 2015-9-8 22:36
你这绝对是大神。。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |