//
// Zombie.h
// OC03_继承,便利构造器,初始化方法
//
// Created by dllo on 15/7/16.
// Copyright (c) 2015年 zhozhicheng. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface Zombie :NSObject
// 特征
{
@private
NSInteger _blood;
NSInteger _attack;
CGFloat _speed;
}
// 行为
// 对方法的重写
- (void)walk;
- (void)attack;
- (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
// OC03_继承,便利构造器,初始化方法
//
// Created by dllo on 15/7/16.
// Copyright (c) 2015年 zhozhicheng. All rights reserved.
//
#import "Zombie.h"
@implementation Zombie
- (void)walk{
NSLog(@"普通僵尸正在走");
}
- (void)attack{
NSLog(@"普通僵尸正在攻击");
}
- (void)dead{
NSLog(@"普通僵尸正在死");
}
- (id)initWithBlood:(NSInteger)blood
attack:(NSInteger)attack
speed:(CGFloat)speed{
//完整版的初始化方法
//先调用一下父类的初始化方法,对父类继承过来的成员变量进行设置
self = [superinit];
//当这个对象在初始化过程中出现问题,会返回一个空指针,如果空指针接下来的赋值就没有意义了,跳过去,如果返回的是一个正常的堆空间地址,才能继续赋值
if (self ) {
_speed =speed;
_blood =blood;
_attack =attack;
}
return self;
}
// C语言中如果针对一个空指针进行操作,比如赋值,系统运行带这句代码系统马上崩溃,而OC遇到空指针会把这句代码当成一句费代码,会执行,但不会有任何结果
// 类方法
//便利构造器把创建对象的过程放到了程序的.m文件中,这样通过类这届就能创建出一个对象出来
//系统类提供了很多便利构造器的方法
+ (Zombie *)zombieWithBlood:(NSInteger )blood
attack:(NSInteger )attack
speed:(CGFloat)speed{
Zombie *zombie=[[Zombiealloc] initWithBlood:bloodattack:attack speed:speed];
return zombie;
}
@end
//
// LuZhangZombie.h
// OC03_继承,便利构造器,初始化方法
//
// Created by dllo on 15/7/16.
// Copyright (c) 2015年 zhozhicheng. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "Zombie.h"
@interface LuZhangZombie :Zombie
{
//子类只需要写自己特有的特征就可以,其余的特征都会继承
NSString *_equipment;
}
//- (void)walk;
//- (void)attack;
//- (void)dead;
- (void)loseEquipment;
- (id)initWithBlood:(NSInteger)blood
attack:(NSInteger)attack
speed:(CGFloat)speed
equipment:(NSString *)equipment;
@end
//
// LuZhangZombie.m
// OC03_继承,便利构造器,初始化方法
//
// Created by dllo on 15/7/16.
// Copyright (c) 2015年 zhozhicheng. All rights reserved.
//
#import "LuZhangZombie.h"
@implementation LuZhangZombie
- (void)walk{
NSLog(@"路障僵尸正在走");
}
- (void)attack{
NSLog(@"路障僵尸正在攻击");
}
- (void)dead{
NSLog(@"路障僵尸正在死");
}
- (void)loseEquipmen{
NSLog(@"路障将是丢失装备");
}
- (id)initWithBlood:(NSInteger)blood
attack:(NSInteger)attack
speed:(CGFloat)speed
equipment:(NSString *)equipment{
self = [superinitWithBlood:blood attack:attack speed:speed];
if (self) {
_equipment =equipment;
}
return self;
}
@end
//
// TieTongZombie.h
// OC03_继承,便利构造器,初始化方法
//
// Created by dllo on 15/7/16.
// Copyright (c) 2015年 zhozhicheng. All rights reserved.
//
#import "LuZhangZombie.h"
@interface TieTongZombie :LuZhangZombie
{
NSString *_weakness;
}
- (id)initWithBlood:(NSInteger)blood
attack:(NSInteger)attack
speed:(CGFloat)speed
equipment:(NSString *)equipment
weakness:(NSString *)weakness;
@end
//
// TieTongZombie.m
// OC03_继承,便利构造器,初始化方法
//
// Created by dllo on 15/7/16.
// Copyright (c) 2015年 zhozhicheng. All rights reserved.
//
#import "TieTongZombie.h"
@implementation TieTongZombie
- (void)walk{
// super的作用是寻找继承过来的方法,并且执行该方法
[superwalk];
NSLog(@"铁桶僵尸正在走");
}
- (void)attack{
NSLog(@"铁桶僵尸正在攻击");
}
- (void)dead{
NSLog(@"铁桶僵尸正在死");
}
- (void)loseEquipmen{
NSLog(@"铁桶将是丢失装备");
}
- (id)initWithBlood:(NSInteger)blood
attack:(NSInteger)attack
speed:(CGFloat)speed
equipment:(NSString *)equipment
weakness:(NSString *)weakness{
self = [super initWithBlood:blood attack:attack speed:speed equipment:equipment];
if (self) {
_weakness= weakness;
}
return self;
}
@end
//
// main.m
// OC03_继承,便利构造器,初始化方法
//
// Created by dllo on 15/7/16.
// Copyright (c) 2015年 zhozhicheng. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "LuZhangZombie.h"
#import "TieTongZombie.h"
int main(int argc,const char * argv[]) {
//继承:子类会继承父类所有的特征还有行为
// // 当对象在执行方法的时候,子类重写了父类的方法,系统会优先使用子类的方法,如果没有重写,则用父类的方法
// LuZhangZombie *LuZom =[[LuZhangZombie alloc] init];
// [LuZom walk];
// [LuZom attack];
//
// TieTongZombie *tieZom = [[TieTongZombie alloc] init];
// [tieZom walk];
//
// // 继承是单向的,一个类只能有一个父类,但是一个类可以有无数个子类
// // NSObject是所有类的父类,也可以称为基类
// // 类的继承是有传递性的
//
// NSLog(@"%@",[tieZom class]);
LuZhangZombie *zom =[[LuZhangZombiealloc]initWithBlood:100attack:20 speed:10equipment:@"路障"];
return 0;
}