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

继承

继承

继承的主要作用就是保证类的完整以及简化代码.

使用时把公共的方法和实例变量写在父类里,子类只需要写自己独有的实例变量和方法就行

特点:

  • 只允许单继承
  • OC中的根类是NSObject
  • 继承的内容:是所有实例变量和方法
  • 如果子类中不想用父类方法的实现,可以重写方法

注意:

  • 继承的上层是父类,下层是子类
  • 继承是单向的,不能相互继承
  • 继承是有传递性的,即如果A继承于B,B继承于C,A就具有B和C的特征和行为
  • 子类可以继承父类全部的特征和行为

继承的实现

#import <Foundation/Foundation.h>
@interface Zombie : NSObject

Zombie 是子类,NSObject是父类

继承中方法的执行

如果有三个类,即A继承于B,B继承于C,如果给C的对象发送一个消息:message,执行顺序为

  • 首先检查C中是否有重写message方法的实现
  • 如果没有,查找父类B中是否有message的实现
  • 一层一层向上查找,找到即执行
  • 如果最后根类NSObject中也没有实现,也会出现异常,导致崩溃

super

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消息,初始化公共变量,初始化成功之后,再初始化自身特有变量,从而完成全部实例变量的初始化。

初始化方法特征

  • 初始化方法是”-“方法
  • 返回值是id或者insurancetype
  • 以init开头
  • 可以带多个参数
  • 先执行super的初始化方法,再初始化自身变量,最后return self;

便利构造器

  • 便利构造器就是在初始化方法的基础上,封装了对象的创建过程
  • 便利构造器是”+”方法,返回本类型,方法名以类名开头
  • 可以有多个参数
  • 在内部封装了alloc和初始化方法,使用起来更加简洁

实现部分:

声明

+ (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号整理

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-06 05:30:52

OC03-继承,便利构造器,初始化方法的相关文章

【学习ios之路:Object-C】继承,便利构造器.NSString应用

1.继承定义 公共父类使用场景:当多个类之间存在部分相同的特征以及行为时,为了防止多个类中写重复代码,新建一个公共的父类,父类中填写多个类中相同的特征以及行为,让多个类继承即可. 2.继承特点 *.继承内容:父亲全部的实力变量以及方法 *.继承过来的内容的所有权:继承过来的内容是自己的,只不过来源于父类, *.OC中只允许单继承,也就是一个类只能有一个父类, *.继承具有传递性.A继承自B,B继承自C,A拥有B和C的所有的内容. *.继承不具备互逆性;不能A继承B,B再继承A. *.继承过来的内

继承、初始化?方法、便利构造器

继承特点 OC中只允许单继承. 没有?父类的类称为根类,OC中的根类是NSObject(祖宗). 继承的内容:所有实例变量和?方法. 如果?子类不满意?父类?方法的实现,可以重写(overwrite)?父 类的?方法. 继承具有传递性 完成初始化方法 - (void)init { //给super发送init消息:即执行父类中实现的init方法 self = [super init]; if (self) { //初始化设置 } //返回初始化完成的对象 return self; } 上面称作

初始化方法自动继承

子类默认不会继承父类的初始化方法,然而,如果某种条件满足的话,父类的初始化方法还是可以继承给子类.在通常情况下,这意味着你不必复写父类的初始化方法,在安全的前提下可以以最低的代价继承父类的初始化方法. 假设子类新增的stored properties 都提供了默认值,那么提供了以下两条规则: 规则1: 如果你的子类没有定义任何的指定初始化方法(新增便利初始化方法可有可无),那么子类会自动继承父类的所有指定初始化方法. 规则2: 如果子类通过规则1,或者通过自定义实现父类的所有指定初始化方法,那么

OC3-完全形态的初始化,初始化方法;;遍历初始化

理解继承,掌握他的属性和方法的使用还有关系::完全形态的初始化,初始化方法::遍历初始化, 1.oc里面继承的特点:(1)继承中上一层时父类,下一层是子类,父类和子类时相对的.(2)所有的类是最根本的父类是NSObject:类的始祖(3)继承具有传递性(4)核心:子类能继承父类全部(private除外)特征和行为. 2.继承:(1)增强代码的复用性,减少代码的开发时间,实现的代码的层级分离, 3.继承的使用,(1)在interface后面  类名:父类名  继承实现. 注意:(1)oc中是单继承

OC基础:继承.初始化方法,便利构造器

继承: 1.单向继承,一个类只能有一个父类,一个父类可以有多个子类. 2.单向继承,基类(根类)是OSObject 3.子类可以继承父类的属性和方法 当父类的方法不满足子类的需求时,子类可以重写父类的方法,重写父类的方法,在子类中不需要再次声明. 1.完全重写 2.部分重写   使用super 建立继承关系之后,子类可以继承父类的: 1.实例变量,@[email protected]修饰情况之下 2.公开的方法 一个方法如果在.h中声明了,那么这个方法就是公开的方法,如果没有声明,则是私有的.

Objective-C学习笔记_继承、初始化方法、便利构造器

一.继承 继承的上层:父类,继承的下层:子类.继承是单向的,不能相互继承.继承具有传递性:A继承于B,B继承于C,A具有B和C的特征和?为.子类能继承父类全部的特征和行为. 例题 打僵尸.需求: 1.定义普通僵尸类: 实例变量:僵尸总血量.僵尸每次失血量. 方法:初始化方法(总血量).被打击失血.死亡. 2.定义路障僵尸类: 实例变量:僵尸总血量.僵尸每次失血量,道具,弱点. 方法:初始化方法(总血量).被打击失血.失去装备.死亡. 3.定义铁桶僵尸类: 实例变量:僵尸总血量.僵尸每次失血量,道

Objective-C 继承、初始化方法、便利构造器

继承.初始化方法.便利构造器 今天我们要学习继承 初始化方法 以及遍历构造器 首先我们要理解一些概念性的东西. 继承: 在OC里,继承是单继承的,所谓的单继承就是一个子类继承一个父类,例如我们之前创建的Person类是继承于NSObject的.回顾一下继承的格式 @interface Person : NSObject //在冒号后面是继承的父类. 人继承与NSObject 子类是只能继承一个父类,但父类却可以有多个子类.例如: @interface Student : Person // 学生

第三讲.继承,完整初始化方法,遍历构造器,多态(代码) 另附植物大战僵尸练习

//初始化和遍历构造器使用 //person.h文件 1 #import <Foundation/Foundation.h> 2 3 @interface Person : NSObject 4 5 { 6 7 NSString *_name; 8 int _age; 9 NSString *_sex; 10 11 12 } 13 14 +(id)PersonWithName:(NSString*)name age:(int)age; 15 -(id)initWithName:(NSStrin

Objective-C( 继承,初始化方法)

一.继承 1.继承的上层:父类,继承的下层:子类 2.继承是单向的 3.继承具有传递性:子类继承父类的特征和行为 4.子类扩展父类,更加具体 oc中的继承 1.oc中的继承,即一个类继承另一个类: 2.被继承的类称为父类或超类: 3.继承的类为子类 继承的特点 1.oc中只允许单继承 2.没有父类的类称为根类.oc中的根类是  NSObject 3.继承的内容:除了私有变量外的所有实例变量和方法 4.子类可以重写父类的方法 super 1.oc中的关键字 2.作用:给super发送消息,可执行父