免费开源的iOS开发学习平台

OC类(Class):2-类的继承

继承是面向对象编程的重要特性之一,类定义是累加的,每一个定义的类都是基于其父类,并且可以继承父类中定义的属性和方法。需要注意的是,NSObject类是所有类的父类。

1、新增子类

在Xcode中,依次点击File -> New -> File -> Cocoa Touch Class,即可新增类,在Subclass of中输入或者选择新增类的父类,如下图所示:新增的Magician类是Player类的子类,因为魔法师(Magician)也是属于游戏人物(Player)之一。

2、子类继承父类的属性与方法

继承是面向对象编程的重要特征,在Objective-C中创建的类也遵循继承的原则。主要体现在两个方面:

  • 继承父类的属性:当创建一个新的类时,新的类不仅仅包含其自身定义的属性,并且还包括在其父类中定义的属性,以及其父类的父类的属性,并按照这个规则一直追溯到根类。在iOS开发中,NSObject是所有类的根类,因此,所有类都可以使用NSObject中定义的属性以及方法。

  • 继承父类的方法:一个对象既可以访问自身定义的方法,也可以访问所有父类的方法。当需要调用父类的方法时,需要使用到关键字super

下面的示例代码中,在新增的Magician类是Player类的子类,它具有两个自身特有的方法specialMagicAttack和mixAttack。其中,specialMagicAttack方法中,使用到了父类的属性magicPoint;另外,在mixAttack方法中,使用super关键字,调用了父类的两个方法。

  • Magician.h文件定义
#import "Player.h"
@interface Magician : Player 

/*魔法师特殊魔法攻击*/
-(void) specialMagicAttack;

/*混合共计(普通攻击+魔法攻击)*/
-(void) mixAttack;
@end
  • Magician.m文件中实现specialMagicAttack方法,其中调用了父类中定义的属性magicPoint。
-(void)specialMagicAttack{
    self.magicPoint -= 50;
    NSLog(@"specialMagicAttack!");
}
  • Magician.m文件中实现mixAttack方法,其中调用了父类中的normalAttack以及magicAttack方法,注意调用时需要使用super关键字,说明调用的是定义在父类中的方法。
-(void)mixAttack{
    //普通攻击
    [super normalAttack];
    //魔法攻击
    [super magicAttack];
} 

示例代码

https://github.com/99ios/3.1.2