继承的主要作用就是保证类的完整以及简化代码.
使用时把公共的方法和实例变量写在父类里,子类只需要写自己独有的实例变量和方法就行
特点:
注意:
#import <Foundation/Foundation.h>
@interface Zombie : NSObject
Zombie 是子类,NSObject是父类
如果有三个类,即A继承于B,B继承于C,如果给C的对象发送一个消息:message,执行顺序为
super是编译器指令,不是对象
主要作用就是如果给super发消息,就可以执行父类中实现的方法
子类如果既有自己的实现,又有父类继承下来的实现,如果要使用父类的实现,就向super发送消息
创建对象分为两步,开辟空间以及初始化
初始化方法的主要作用是为某些实例变量赋初值
初始化方法在对象的整个生命周期里只使用一次
先调用下父类的初始化方法,对父类继承过来的成员变量进行设置
if语句的意义是 : 当这个对象在初始化过程中出现问题,会返回一个空指针,如果是空指针接下来的赋值就没有意义,跳过去,如果返回的是一个正常的堆空间地址,才能继续赋值
-(id) initWithBlood:(NSInteger)blood
attack:(NSInteger)attack
speed:(CGFloat)speed;
{
// 完整版初始化方法
self = [super init];
if (self) {
_speed = speed;
_blood = blood;
_attack = attack;
}
return self;
}
在自身的初始化方法中,优先向super发送init消息,初始化公共变量,初始化成功之后,再初始化自身特有变量,从而完成全部实例变量的初始化。
实现部分:
声明
+ (Person *)personWithName:(NSString *)Name
sex:(NSString *)Sex
age:(NSInteger)Age;
实现
+ (Person *)personWithName:(NSString *)Name
sex:(NSString *)Sex
age:(NSInteger)Age;
{
Person *person = [[Person alloc]initWithName:Name sex:Sex age:Age];
return person;
}
使用便利构造器创建对象
Person *per = [Person personWithName:@"张三" sex:@"男" age:20];
Zombie.h
@interface Zombie : NSObject
// 特征
{
NSInteger _blood;
NSInteger _attack;
CGFloat _speed;
}
// 行为
- (void) attack;
- (void) walk;
- (void) dead;
// 自定义初始化方法的声明
- (id) initWithBlood:(NSInteger)blood
attack:(NSInteger)attack
speed:(CGFloat)speed;
// 便利构造器
+ (Zombie *)zombieWithBlood:(NSInteger)blood
attack:(NSInteger)attack
speed:(CGFloat)speed;
@end
Zombie.m
@implementation Zombie
- (void) attack
{
NSLog(@"普通僵尸正在攻击");
}
- (void) walk
{
NSLog(@"普通僵尸正在走");
}
- (void) dead
{
NSLog(@"普通僵尸死了");
}
-(id) initWithBlood:(NSInteger)blood
attack:(NSInteger)attack
speed:(CGFloat)speed;
{
// 完整版初始化方法
self = [super init];
if (self) {
_speed = speed;
_blood = blood;
_attack = attack;
}
return self;
}
+ (Zombie *)zombieWithBlood:(NSInteger)blood
attack:(NSInteger)attack
speed:(CGFloat)speed;
{
Zombie *zombie = [[Zombie alloc] initWithBlood:blood attack:attack speed:speed];
return zombie;
}
BlockZombie.h
@interface BlockZombie : Zombie
// 特征
{
// 子类只需要写自己的特征及行为
NSString *_equipment;
}
// 行为
// 对方法的重写
//- (void) attack;
//- (void) walk;
//- (void) dead;
-(void) loseEquipment;
-(id) initWithBlood:(NSInteger)blood
attack:(NSInteger)attack
speed:(CGFloat)speed
equipment:(NSString *)equipment;
@end
BlockZombie.m
@implementation BlockZombie
- (void) attack
{
NSLog(@"路障僵尸正在攻击");
}
- (void) walk
{
NSLog(@"路障僵尸正在走");
}
- (void) dead
{
NSLog(@"路障僵尸死了");
}
-(void) loseEquipment
{
NSLog(@"路障僵尸,失去装备");
}
-(id) initWithBlood:(NSInteger)blood
attack:(NSInteger)attack
speed:(CGFloat)speed
equipment:(NSString *)equipment;
{
self = [super initWithBlood:blood attack:attack speed:speed];
if (self) {
_equipment = equipment;
}
return self;
}
@end
于7月16下午以及17号上午学习,18号整理
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/u011752406/article/details/46943469