A ----> 繼承概要
1)面對對象的三大特性:封裝、繼承、多態(tài)
2)繼承即能保證類的完整, 又能簡化代碼
3)定義三個類: 普通僵尸、路障僵尸、鐵桶僵尸,這三個類有很多重復的實例變量和方法,比如:血量、攻擊力、移動速度;行走,攻擊,死亡。 面對對象的繼承特性大大簡化代碼。
把公共的實例變量寫在父類里 , 子類只需要寫自己獨有的實例變量和方法即可。
B ---- > 繼承特點
1)繼承的上層:父類; 繼承的下層:子類
2)繼承的內容 : 所有的實例變量和方法
3)繼承是單向的, 不能相互繼承
4) 繼承具有傳遞性: A 繼承與 B , ?B 繼承與 C , A 具有 B 和 C 的特征和行為
5)如果子類不滿意父類方法的實現(xiàn), 可以重寫(overwrite)父類的方法
C ---- > 重寫從父類繼承來的方法的不同情況
1)完全以子類的實現(xiàn)內容為主,丟棄父類實現(xiàn)的內容。
2)完全以父類的實現(xiàn)內容為主, 沒有子類實現(xiàn)的內容
3)既有父類對該方法的時下, 也有子類對該方法的實現(xiàn)
D ---- > ?super
1)super 是編譯器指令, 并非對象
2) 作用: 給 super 發(fā)消息, 可以指向父類該方法的實現(xiàn)
E ---- > 繼承中方法的執(zhí)行
1、OC 中方法調用采用消息發(fā)送機制 【 receiver message 】;
2、給 CollegeStudent 對象發(fā)送消息 : study
1)查找本類是否實現(xiàn) study(重寫) 方法?
2)如果沒有, 查找父類中 study 是否實現(xiàn)
3)逐級向上查找, 找到即執(zhí)行
4)如果 NSObject 也沒有實現(xiàn), 會拋出異常, 引起 crash

F --- > 初始化方法步驟
1、創(chuàng)建對象分兩步:1)為對象分配空間 2)進行初始化操作
2、初始化方法的主要作用是 : 為某些實例變量賦初值
3、初始化方法在對象的整個生命周期里只使用一次
4、初始化方法實在對象的初始化階段完成其實例變量的賦值操作,一個對象的初始化階段只有一次,所以初始化方法只使用一次
G ---- > 初始化實例
- ( id )init{
// 給super 發(fā)送 init 消息:執(zhí)行父類中實現(xiàn)的 init ?方法
self = [super init];
// 判斷從父類繼承過來的 init 方法 是否初始化成功
if ( self ){
// 初始化設置
}
//返回初始化完成的對象
return self;
}
子類定義了除父類中公共實例變量之外的實例變量
在自身的初始化方法中, 優(yōu)先向super 發(fā)送 init 消息,初始化公共變量, 初始化成功后, 再初始化自身持有變量, 從而完成所有實例變量的初始化
H ---- ?> self
1、self 是系統(tǒng)關鍵字。self 在方法中指代當前方法的調用者
2、self 在實例方法中, 指代調用當前方法的對象
3、self 在類方法中, 指代當前類
I ---- > 初始化方法特征
1、初始化方法是 “-” ?方法
2、id 或 instancetype 類型的返回值
3、以 init 開頭
4、可以帶 0 到多個參數(shù)。
5、內部實現(xiàn) : 限制性super 初始化方法, 再初始化自身變量, 后 return self
J ---- > 初始化過程
1、自己的初始化方法中,優(yōu)先調用父類的初始化方法。
2、父類的初始化方法再調用父類的初始化方法,依次往上調
3、處于最上層的初始化完成之后,回到第二層的初始化方法中,完成第二層的初始化
4、第二層的初始化完成后,回到第三層的初始化方法中,依次執(zhí)行初始化方法,直到本類的初始化方法完成
K ---- > 指定初始化方法
1、一個類可以有多個初始化方法
2、雖然有多個初始化方法, 但是一個對象只能使用一個初始化方法。
例如 : initWithName: ? ? initWithGender: ? initWithName: gender:
3、指定初始化方法 : 無論調用哪一個初始化方法都會調用的初始化方法
4、通常把初始化想做的全部操作放到指定初始化方法中,這樣就無需在每一個初始化方法中都要寫一遍,簡化代碼,方便后期維護
5、選取原則 : 一般選參數(shù)最多的初始化方法作為指定初始化方法
L ---- > 便利構造器簡述
1、封裝類對象創(chuàng)建過程 : 內部實現(xiàn): 封裝了alloc 和初始化操作, 創(chuàng)建對象更加方便快捷
2、1)便利構造器是 “ + ” 方法
2)返回本類型的實例
3)方法名以類名開頭
4)可以有 0 到多個參數(shù) ?+ (id)personWithName : ?gender : ?age :?
M ----- > 小結
1、繼承是面對對象的三大特性之一, 合理的繼承, 能減少很多 冗余代碼,加快開發(fā)速度。
2、初始化方法以 init 開頭,在對象的生命周期中只使用一次
3、遍歷構造器封裝了對象的創(chuàng)建過程, 進一步簡化了創(chuàng)建的步驟。