3、繼承、初始化⽅法、便利構造器

繼承

  • 上層:父類;下層:子類
  • 繼承是單向的,不能相互繼承
  • 集成具有傳遞性:A繼承於B,B繼承於C,A具有B和C的特徵和行爲
  • 子類能繼承父類全部的特徵和行爲
  • 把公共的⽅法和實例變量寫在父類⾥裏,子類只需要寫⾃⼰己獨有的實例變量和方法即可
  • 繼承既能保證類的完整,又能簡化代碼
  • 沒有父類的類稱爲根類,OC中的根類是NSObject(祖宗)

繼承實現

//          子類            父類
@interface CommonZombie : NSObject{

}

#import "CommonZombie.h"

//            子類              父類
@interface BarricadeZombie : CommonZombie{

}

繼承中方法的執行:逐級向上查找

給CollegeStudent對象發送消息: study

  1. 查找本類中是否實現(重寫)study⽅法
  2. 如果沒有,查找⽗類中study是否實現
  3. 逐級向上查找,找到即執⾏
  4. 如果NSObject也沒實現,會拋出異常,引起Crash

super

super是編譯器指令,並⾮對象。
作⽤:給super發消息,可以執⾏⽗類中實現的⽅法

⼦類可以重寫⽗類的⽅法,即:⼦類既有⾃⼰的實現,⼜有⽗類繼承下來的實現,如果想使⽤⽗類的實現,向super發送消息


初始化⽅法

創建對象分兩步:開闢空間、初始化。
初始化⽅法的主要作⽤是:爲某些實例變量賦初值。
初始化⽅法在對象的整個⽣命週期⾥只使⽤⼀次。

- (id) init
{
    //給super發送init消息:即執行父類中實現的init方法
    self = [super init];
    if(self)
    {
        //初始化設置
    }
    //返回初始化完成的對象
    return self;
}

⼦類定義了除⽗類中公共實例變量之外的實例變量。在⾃⾝的初始化⽅法中,優先向super發送init消息,初始化公共變量,初始化成功之後,再初始化⾃⾝特有變量,從⽽完成全部實例變量的初始化

初始化過程

  1. ⾃⼰的初始化⽅法中,優先調⽤⽗類的初始化⽅法
  2. ⽗類的初始化⽅法中再調⽤⽗類的初始化⽅法,依次往上調⽤
  3. 處於最上層的初始化完成之後,回到第⼆層的初始化⽅法中,完成第⼆層的初始化
  4. 第⼆層的初始化完成之後,回到第三層的初始化⽅法中,依次執⾏初始化⽅法,直到本類的初始化⽅法完成

初始化⽅法特徵

  • 初始化⽅法是 “-”⽅法(對象方法)
  • 返回值類型是:id或者instancetype
  • 以init開頭
  • 可以帶0到多個參數
  • 內部實現:先執⾏super的初始化⽅法,再初始化⾃⾝變量,return self

便利構造器

  • 封裝了對象創建過程
  • 便利構造器是“+”⽅法,返回本類型的實例,⽅法名以類名開頭
  • 可以有0到多個參數
  • 內部實現:封裝了alloc和初始化⽅法。使⽤起來更加簡潔

便利構造器的實現

//聲明和實現便利構造器
+(id)personWithName:(NSString *)name
{
    Person *p =[[Person alloc] initWithName:name];
    return p;
}
//使用便利構造器創建對象
Person *p = [Person personWithName:@"張三"];
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章