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

一、继承

继承的上层:父类,继承的下层:子类。继承是单向的,不能相互继承。继承具有传递性:A继承于B,B继承于C,A具有B和C的特征和⾏为。子类能继承父类全部的特征和行为。

示例
打僵尸。需求:
1、定义普通僵尸类:
实例变量:僵尸总血量、僵尸每次失血量。
方法:初始化方法(总血量)、被打击失血、死亡。
2、定义路障僵尸类:
实例变量:僵尸总血量、僵尸每次失血量,道具,弱点。
方法:初始化方法(总血量)、被打击失血、失去装备、死亡。
3、定义铁桶僵尸类:
实例变量:僵尸总血量、僵尸每次失血量,道具,弱点。
方法:初始化方法(总血量)、被打击失血、失去装备、死亡。
4、在main.m中创建普通僵尸对象,设置总血量50,每次失血量为 3,没有道具。
5、在main.m中创建路障僵尸对象,设置总血量80,每次失血量为 2,设置道具为路障。
6、在main.m中创建铁桶僵尸对象,设置总血量120,每次失血量为 1,设置道具为铁桶。

如果定义三个类:普通僵尸、路障僵尸、铁桶僵尸。它们会有很多重复的实例变量和方法,这不仅是体力活,而且也不科学。面向对象提供了继承语法,能⼤大简化代码。把公共的方法和实例变量写在父类里,子类只需要写⾃己独有的实例变量和方法即可。继承既能保证类的完整,又能简化代码。

继承实现

#import <Foundation/Foundation.h>
              /* 子类 */     /* 父类 */
@interface OrdinaryZombie : NSObject
@end
#import "OrdinaryZombie.h"
              /* 子类 */        /* 父类 */
@interface RoadblockZombie : OrdinaryZombie
@end

继承特点

Objective-C中只允许单继承。没有父类的类称为根类,Objective-C中的根类是NSObject(祖宗)。

继承的内容:所有实例变量和方法。如果子类不满意父类方法的实现,可以重写(overwrite)父类的方法。

继承树

Objective-C 继承树

继承中⽅法的执行

Objective-C继承中⽅法的执行

self、super

self和super是Objective-C语言中的关键字。

super是编译器指令,并非对象。

作用:给super发消息,可以执⾏父类中实现的方法。

子类可以重写父类的方法,即:子类既有⾃己的实现,⼜有父类继承下来的实现,如果想使用父类的实现,向super发送消息。

self作用:调用自身的方法和属性,始终代表调用方法的对象。

self和super使用的简单示例代码如下:

- (instancetype)initWithName:(NSString *)name
                         sex:(NSString *)sex
{
    /* 
     * 详细解释[super init]
     * 父类中定义的实例变量通过向super请求初始化方法来得到初始化
     * 向super请求初始化方法的消息连接起了所有继承树上的对象
     * 父类的变量会比子类的变量先得到初始化
     * 例如: CollegeStudent对象在初始化时, 会依次对NSObject, Student, CollegeStudent进行初始化
     * 关于初始化方法, 请查阅本博文下面内容
     */
    self = [super init];
    if (self) {
        _name = name;
        _sex = sex;
    }
    return 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值