// 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語言中如果針對一個null 指標進行操作,比如賦值,系統運行到這段代碼直接崩潰,而oc中遇到null 指標會把這句代碼當做廢代碼,會執行,但不會有任何效果
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];
// 當這個對象在初始化過程中出現問題,會返回一個null 指標,如果是null 指標接下來的複製就沒有意義了,跳過去,如果返回一個正常的堆空間指標,繼續賦值
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);