OC_继承,便利构造器,初始化方法

来源:互联网 发布:质量管理体系数据分析 编辑:程序博客网 时间:2024/05/21 22:29

//

//  main.m

//  OC3_继承,便利构造器,初始化方法

//

//  Created by dllo on 15/7/16.

//  Copyright (c) 2015 flg. All rights reserved.

//


#import <Foundation/Foundation.h>

#import "LuZhangZombie.h"

#import "Zombie.h"

#import "TieTongZombie.h"

#import "Person.h"


int main(int argc,constchar * argv[]) {

    //继承:子类会继承父类所有的特征和行为

    //当对象在执行方法的时候,子类重写了父类的方法,西戎会优先使用子类的方法,如果没有重写,则使用父类的方法.

//    Zombie *zombie=[[Zombie alloc] init];

//    [zombie walk];

//    LuZhangZombie *luZom=[[LuZhangZombie alloc] init];

//    [luZom walk];

//    [luZom attack];

//    [luZom loseEquipment];

//    TieTongZombie *tieZom=[[TieTongZombie alloc] init];

//    [tieZom walk];

//    [tieZom attack];

//    [tieZom loseEquipment];

//继承是单向的,一个类只能有一个父类,但是一个类可以有无数个子类

//NSObject是所有类的父亲,也可以称为基类

//类的继承是有传递性的.

//    NSLog(@"%@",[zombie class]);

//    Zombie *zom=[Zombie alloc];

//    zom=[zom init];

//    Zombie *zom1=[[Zombie alloc] initWithSetBlood:200 Attack:50 Speed:25];

//    [zom1 sayHi];

//    LuZhangZombie *luzom=[[LuZhangZombie alloc] initWithSetBlood:100 Attack:10 Speed:5 Equipment:@"路障"];

//    [luzom sayHi];

//    TieTongZombie *tiezom=[[TieTongZombie alloc] initWithSetBlood:200 Attack:100 Speed:50 Equipment:@"铁桶" Weakness:@"铁通掉了"];

//    [tiezom sayHi];


    ////使用便利构造器创建对象

//    Zombie *zom=[Zombie zombieWithBlood:100 Attack:20 Speed:10];

//    [zom attack];

////c语言中如果针对空指针进行操作,比如赋值,系统运行到这句代码马上崩溃,OC遇到空指针会把这句代码当成一句废话,会执行不会有任何结果.

    Person *per=[[Person alloc] initWithSetName:@"安逸臣" Sex:@"" Age:27];

    [per sayHi];

    Person *per1=[Person personWithName:@"文世倾" Sex:@"" Age:28];

    [per1 sayHi];

    [per walk];

    [per1 eat];

   return0;

}


/////////////////////////Zombie类///////////////////////////

(1)

//

//  Zombie.h

//  OC3_继承,便利构造器,初始化方法

//

//  Created by dllo on 15/7/16.

//  Copyright (c) 2015 flg. All rights reserved.

//


#import <Foundation/Foundation.h>


@interface Zombie : NSObject

//特征


{   NSInteger _blood;

    NSInteger _attack;

    CGFloat _speed;

}


//行为

-(void)sayHi;

-(void)walk;

-(void)attack;

-(void)dead;

//自定义初始化声明(对僵尸特征的初始化)

-(id)initWithSetBlood:(NSInteger)blood

               Attack:(NSInteger)attack

                Speed:(CGFloat)speed;


////便利构造器.

+(Zombie *)zombieWithBlood:(NSInteger)blood

                    Attack:(NSInteger)attack

                     Speed:(CGFloat)speed;


@end



(2)

//

//  Zombie.m

//  OC3_继承,便利构造器,初始化方法

//

//  Created by dllo on 15/7/16.

//  Copyright (c) 2015 flg. All rights reserved.

//


#import "Zombie.h"


@implementation Zombie


-(void)sayHi{

    NSLog(@"血量:%ld,攻击力:%ld,速度:%g",_blood,_attack,_speed);

}

-(void)walk{

    NSLog(@"普通僵尸正在行走");

}

-(void)attack{

    NSLog(@"普通僵尸正在攻击");

}

-(void)dead{

    NSLog(@"普通僵尸正在死亡");

}

//完整版的初始化方法

-(id)initWithSetBlood:(NSInteger)blood

               Attack:(NSInteger)attack

                Speed:(CGFloat)speed{

    //先调用父类初始化方法,对父类继承过来的成员变量进行设置

  self=[super init];

    //当这个对象在初始化过程中出现问题,会返回空指针,如果是空指针接下来的赋值就没有一点意义,跳过去,如果返回的是一个正常的堆空间地址,才继续赋值

   if (self) {

        _blood=blood;

        _attack=attack;

        _speed=speed;

    }

    return self;

}

////便利构造器.(创建对象);

//类方法,便利构造器把创建的对象的过程放到了程序里的.m文件中,这样通过类,直接就能创建一个对象出来

//系统类提供了很多便利构造器的方法.

+(Zombie *)zombieWithBlood:(NSInteger)blood

                    Attack:(NSInteger)attack

                     Speed:(CGFloat)speed{

    Zombie *zombie=[[Zombie alloc] initWithSetBlood:blood Attack:attack Speed:speed];

   return zombie;

}

@end




////////////////////LuZhangZombie////////////////////////////////

(1)

//

//  LuZhangZombie.h

//  OC3_继承,便利构造器,初始化方法

//

//  Created by dllo on 15/7/16.

//  Copyright (c) 2015 flg. All rights reserved.

//


#import <Foundation/Foundation.h>

#import "Zombie.h"

@interface LuZhangZombie : Zombie

//特征

{

    //子类只需要写自己特有的特征就可以,其余的特征都会继承.

    NSString *_equipment;

}

//行为

//对方法的重写

//-(void)walk;////此处可以不声明,因为父类已声明过

//-(void)attack;

//-(void)dead;

-(void)sayHi;

-(void)loseEquipment;

-(id)initWithSetBlood:(NSInteger)blood

               Attack:(NSInteger)attack

                Speed:(CGFloat)speed

            Equipment:(NSString *)equipment;

@end




(2)

//

//  LuZhangZombie.m

//  OC3_继承,便利构造器,初始化方法

//

//  Created by dllo on 15/7/16.

//  Copyright (c) 2015 flg. All rights reserved.

//


#import "LuZhangZombie.h"


@implementation LuZhangZombie

-(void)sayHi{

    NSLog(@"血量:%ld,攻击力:%ld,速度:%g,装备:%@",_blood,_attack,_speed,_equipment);

}

-(void)walk{

      ///子类重新定义僵尸的方法,否则向上寻找父类方法

    NSLog(@"路障僵尸正在走来");

}

-(void)attack{

    NSLog(@"路障僵尸正在攻击");

}

-(void)dead{

    NSLog(@"路障僵尸正在死亡");

}

-(void)loseEquipment{

    _speed=100;

    NSLog(@"路障僵尸失去了装备");

}

-(id)initWithSetBlood:(NSInteger)blood

               Attack:(NSInteger)attack

                Speed:(CGFloat)speed

            Equipment:(NSString *)equipment{

    //继承父类,先对父类进行赋值

   self=[super initWithSetBlood:blood Attack:attack Speed:speed];

   if (self) {

        _equipment=equipment;

    }

    return self;

}

@end



/////////////////////////TieTongZombie////////////////////////

(1)

//

//  TieTongZombie.h

//  OC3_继承,便利构造器,初始化方法

//

//  Created by dllo on 15/7/16.

//  Copyright (c) 2015 flg. All rights reserved.

//


#import "LuZhangZombie.h"


@interface TieTongZombie : LuZhangZombie

{

    NSString *_weakness;

}

-(id)initWithSetBlood:(NSInteger)blood

               Attack:(NSInteger)attack

                Speed:(CGFloat)speed

            Equipment:(NSString *)equipment

             Weakness:(NSString *)weakness;

@end


(2)

//

//  TieTongZombie.m

//  OC3_继承,便利构造器,初始化方法

//

//  Created by dllo on 15/7/16.

//  Copyright (c) 2015 flg. All rights reserved.

//


#import "TieTongZombie.h"


@implementation TieTongZombie

-(void)sayHi{

    NSLog(@"血量:%ld,攻击力:%ld,速度:%g,装备:%@,弱点:%@",_blood,_attack,_speed,_equipment,_weakness);

}

-(void)walk{

    [super walk];////super寻找继承过来的方法,并执行该方法,只能执行自己父类,

    ////方法重新定义,优先执行子类定义,如果子类没有重新定义方法,则向上继承父类定义的方法

    NSLog(@"铁桶僵尸正在走来");

}

-(void)attack{

    NSLog(@"铁桶僵尸正在攻击");

}

-(void)dead{

    NSLog(@"铁桶僵尸正在死亡");

}

-(void)loseEquipment{

    NSLog(@"铁桶僵尸失去了装备");

}


-(id)initWithSetBlood:(NSInteger)blood

               Attack:(NSInteger)attack

                Speed:(CGFloat)speed

            Equipment:(NSString *)equipment

             Weakness:(NSString *)weakness{

   self=[super initWithSetBlood:blood Attack:attack Speed:speed Equipment:equipment];

   if (self) {

        _weakness=weakness;

    }

    return  self;

}

@end



//////////////////////////person类///////////////////////////////

(1)

//

//  Person.h

//  OC3_继承,便利构造器,初始化方法

//

//  Created by dllo on 15/7/17.

//  Copyright (c) 2015 flg. All rights reserved.

//


#import <Foundation/Foundation.h>


@interface Person : NSObject

//三个成员变量

{

    NSString *_name;

    NSString *_sex;

    NSInteger _age;


}

-(void)eat;

-(void)walk;

//sayHi方法

-(void)sayHi;

//设置器

-(void)setName:(NSString *)name;

-(void)setSex:(NSString *)sex;

-(void)setAge:(NSInteger)age;

//访问器

-(NSString *)name;

-(NSString *)sex;

-(NSInteger)age;

//自定义初始化方法

-(id)initWithSetName:(NSString *)name

                 Sex:(NSString *)sex

                 Age:(NSInteger)age;

//便利构造器

+(Person *)personWithName:(NSString *)name////(Person *)(init);

                      Sex:(NSString *)sex

                      Age:(NSInteger)age;

@end


(2)


//

//  Person.m

//  OC3_继承,便利构造器,初始化方法

//

//  Created by dllo on 15/7/17.

//  Copyright (c) 2015 flg. All rights reserved.

//


#import "Person.h"


@implementation Person

-(void)eat{

    NSLog(@"");

}

-(void)walk{

    NSLog(@"行走");

}

//sayHi方法

-(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;

}

//自定义初始化方法

-(id)initWithSetName:(NSString *)name

                 Sex:(NSString *)sex

                 Age:(NSInteger)age{

   self=[super init];

   if (self) {

    _name=name;

    _sex=sex;

    _age=age;

    }

    return self;

}

//便利构造器

+(Person *)personWithName:(NSString *)name////(Person *)(init);

                      Sex:(NSString *)sex

                      Age:(NSInteger)age{

    Person *per=[[Person alloc] initWithSetName:name Sex:sex Age:age];

   return per;


}

@end



















0 0
原创粉丝点击