// main.m
// OC3_继承,便利构造器,初始化方法
//
// Created by dllo on 15/7/16.
// Copyright (c) 2015年 cml. 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];
// [luZom loseEquipment];
//
// TieTongZombie *tieZom =[[TieTongZombie alloc] init];
// [tieZom walk];
// 继承是单向的,一个类只能有一个父类,但是一个类可以有无数个子类
// NSObject是所有类的父类,也可以称为基类
// 类的继承是有传递性的
// NSLog(@"%@",[tieZom class]);
// c语言中如果针对一个空指针进行操作,比如赋值,系统运行到这段代码直接崩溃,而oc中遇到空指针会把这句代码当做废代码,会执行,但不会有任何效果
Zombie *zom =[Zombie zombieWithBlood:100 attack:20 speed:10];
[zom attack];
return 0;
}
// Zombie.h
// OC3_继承,便利构造器,初始化方法
//
// Created by dllo on 15/7/16.
// Copyright (c) 2015年 cml. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface Zombie : NSObject
// 特征
{
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;
+(Zombie *)zombieWithBlood:(NSInteger)blood attack:(NSInteger)attack speed:(CGFloat)speed;
//+ (Zombie *)zombieWithBlood:(NSInteger)blood attack:(NSInteger)attack speed:(CGFloat)speed;
@end
// Zombie.m
// OC3_继承,便利构造器,初始化方法
//
// Created by dllo on 15/7/16.
// Copyright (c) 2015年 cml. 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 =[super init];
// 当这个对象在初始化过程中出现问题,会返回一个空指针,如果是空指针接下来的复制就没有意义了,跳过去,如果返回一个正常的堆空间指针,继续赋值
if (self){
_speed =speed;
_blood =blood;
_attack=attack;
}
return self;
}
+ (Zombie *)zombieWithBlood:(NSInteger)blood attack:(NSInteger)attack speed:(CGFloat)speed{
// 类方法
// 便利构造器把创建对象的过程放到了程序的.m文件中,这样通过类,直接就能直接创造一个对象出来
// 系统类提供了很多的便利构造器的方法
Zombie *zom = [[Zombie alloc] initWithBlood:blood attack:attack speed:speed];
return zom;
}
@end
// Person.h
// OC3_继承,便利构造器,初始化方法
//
// Created by dllo on 15/7/17.
// Copyright (c) 2015年 cml. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface Person : NSObject
// 3个成员变量
{
NSString *_name;
NSString *_sex;
NSInteger _age;
}
// sayHi方法
-(void)sayHi;
//设置器访问器
-(void)setName:(NSString *)name;
-(void)setSex:(NSString *)sex;
-(void)setAge:(NSInteger)age;
-(NSString *)name;
-(NSString *)sex;
-(NSInteger)age;
//自定义初始化方法(3个成员变量)
-(id)initWithName:(NSString *)name
sex:(NSString *)sex
age:(NSInteger)age;
//遍历构造器(3个成员变量)
+(Person *)personWithName:(NSString *)name
sex:(NSString *)sex
age:(NSString *)age;
@end
// Person.m
// OC3_继承,便利构造器,初始化方法
//
// Created by dllo on 15/7/17.
// Copyright (c) 2015年 cml. All rights reserved.
//
#import "Person.h"
@implementation Person
-(void)sayHi{
NSLog(@"%@, %@, %ld", _name, _sex, _age);
}
//设置器访问器
-(void)setName:(NSString *)name{
_name=name;
}
-(void)setSex:(NSString *)sex{
_sex=sex;
}
-(void)setAge:(NSInteger)age{
_age=age;
}
-(NSString *)name{
return _name;
}
-(NSString *)sex{
return _sex;
}
-(NSInteger)age{
return _age;
}
//自定义初始化方法(3个成员变量)
-(id)initWithName:(NSString *)name
sex:(NSString *)sex
age:(NSInteger)age
{ self =[super init];
if (self) {
_name =name;
_sex =sex;
_age =age;
}
return self;
}
//遍历构造器(3个成员变量)
+(Person *)personWithName:(NSString *)name
sex:(NSString *)sex
age:(NSString *)age
{
Person *person=[[Person alloc] initWithName:name sex:sex age:age];
return person;
}
@end
// LuZhangZombie.m
// OC3_继承,便利构造器,初始化方法
//
// Created by dllo on 15/7/16.
// Copyright (c) 2015年 cml. All rights reserved.
//
#import "LuZhangZombie.h"
@implementation LuZhangZombie
-(void)walk{
NSLog(@"路障僵尸正在走");
}
-(void)attack{
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