標籤:
物件導向的三大特性:封裝,繼承,多態。
1、繼承
繼承既能保證類的完整,又能簡化代碼。
把公用的?法和執行個體變數寫在?類?,?類只需要寫??專屬的執行個體變數和?法即可。
繼承是?向對象三?特性之?,合理的繼承,能減少很多冗餘代碼,加快開發速度。
1> 繼承的特點:
繼承的上層:父類,繼承的下層:子類。
繼承的內容:所有執行個體變數和方法。
繼承是單向的,不能相互繼承。
繼承具有傳遞性:A繼承與B,B繼承與C,A具有B和C的特徵和行為。
如果子類不滿意父類方法的實現,可以重寫(overwrite)父類的方法。
2> super
super是編譯器指令,並?對象。
作?:給super發訊息,可以執??類該?法的實現 。
重寫從?類繼承過來的?法的三種情況:
• 完全以?類的實現內容為主,丟棄?類實現的內容。
• 完全以?類的實現內容為主,沒有?類實現的內容。
• 既有?類對該?法的實現,也有?類對該?法的實現。
3> 訊息發送機制
2、初始化方法 1> 初始化方法
初始化?法的主要作?是:為某些執行個體變數賦初值。
初始化?法在對象的整個?命周期?只使??次。
注:初始化?法是在對象的初始化階段完成其執行個體變數的賦值操作,?個對象的初始化階段只有?次,所以初始化?法只使??次。
1 - (id)init { 2 //給super發送init訊息:執??類中實現的init?法 3 self = [super init]; 4 //判斷從?類繼承過來的init?法是否初始化成功 5 if (self) { 6 //初始化設定 7 } 8 //返回初始化完成的對象 9 return self;10 }
?類定義了除?類中公用執行個體變數之外的執行個體變數。
在??的初始化?法中,優先向super發送init訊息,初始化公開變數, 初始化成功之後,再初始化??特有變數,從?完成全部執行個體變數的初始化。
2> self
self是系統關鍵字。 self在?法中指代當前?法的調?者。
self在執行個體?法中,指代調?當前?法的對象。
- (void)objectMethod { }
self在類?法中,指代當前類。
+ (void)classMethod {} 3> 初始化方法特徵
• 初始化?法是 "_"?法。
• id 或者 instancetype 類型的傳回值。
• 以init開頭。
• 可以帶 0 到多個參數。
內部實現:先執?super的初始化?法,再初始化??變數,後return self
4> 初始化過程
- ??的初始化?法中,優先調??類的初始化?法。
- ?類的初始化?法中再調??類的初始化?法,依次往上調?。
- 處於最上層的初始化完成之後,回到第?層的初始化?法中, 完成第?層的初始化。
- 第?層的初始化完成之後,回到第三層的初始化?法中,依次執?初始化?法,直到本類的初始化?法完成。
5> 指定初始化方法
命名規則:以initWith開頭,後面跟上參數列表
1 - (id)initWithName:(NSString *)name gender:(NSString *)gender {2 self = [super init];3 if (self) {4 _name = name;5 _gender = gender;6 }7 return self;8 }3、便利構造器 1> 封裝了對象建立過程
內部實現:封裝了alloc和初始化操作,建立對象更加?便快捷。
2> 特徵
• 便利構造器是 "+" ?法。
• 返回本類型的執行個體。
• ?法名以類名+ With + 參數列表。
• 可以有 0 到多個參數。
3> 便利構造器聲明,實現和調用
聲明:
1 + (id)personWithName:(NSString *)name gender:(NSString *)gender;
實現:
1 + (id)personWithName:(NSString *)name gender:(NSString *)gender {2 3 return [[Person alloc] initWithName:namegender:gender];4 5 }
調用:
1 Person *per = [Person personWithName:@"Frank" gender:@"男"];
iOSDay11之繼承