OC学习-继承,便利构造器,初始化方法
来源:互联网 发布:网络加密技术有哪些 编辑:程序博客网 时间:2024/05/17 03:08
继承
继承
继承的主要作用就是保证类的完整以及简化代码.
使用时把公共的方法和实例变量写在父类里,子类只需要写自己独有的实例变量和方法就行
特点:
- 只允许单继承
- 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号整理
1 0
- OC学习-继承,便利构造器,初始化方法
- OC之继承,初始化方法,便利构造器
- OC基础:继承.初始化方法,便利构造器
- OC-继承-初始化方法-便利构造器(练习题-打僵尸)
- iOS开发之OC继承、初始化方法、便利构造器
- OC-继承、初始化方法、便利构造器概念
- OC - 第三章 继承、初始化方法、便利构造器
- OC之继承、初始化、便利构造器
- OC学习_ 第三天 继承、初始化方法、便利构造器
- oc初始化方法,便利构造器
- 【继承】指定初始化方法【便利构造器】
- 03 继承 初始化方法 便利构造器
- 继承 初始化方法 便利构造器
- OCday3 初始化方法, 便利构造器, 继承
- OC_继承,便利构造器,初始化方法
- OC_继承,便利构造器,初始化方法
- OC_继承,便利构造器,初始化方法
- OC_继承,便利构造器,初始化方法
- The Triangle(简单DP)
- 黑马程序员——Java基础---面向对象
- 3Sum
- leetcode | Reverse Nodes in k-Group
- 矩阵及其变换、特征值与特征向量的物理意义
- OC学习-继承,便利构造器,初始化方法
- java 泛型简单使用代码
- MZOI-7.18
- sublime text3字体设置方法
- day04--面向对象--多态
- PRank3
- 利用MATLAB生成DSP运行代码(好久不见~)
- CSS之BFC
- 实现JDialog透明背景