在編寫物件導向的程式,都有類似的概念,就是對自已或父類別做為發送訊息(使用方法)的對像,在 Obj-C 中,用了兩個字來執行這個概念  self 與 super。

 

簡單的說:

self 就是自已,而 super 就是它的父類別



但聽起來仍很難理解,我們還是以實例來說明吧。

首先延用 繼承那篇文章 的案例開始說明:

 
// Car 類別 
@interface Car : NSObject 
@property int speed; 
@end 
 
@implementation Car  
@end 
 
 // Turbo Car 類別 
@interface turboCar : Car 
@end 
 
@implementation turboCar 
@end
 
如果我在 Car Class 中寫了個 method 叫 speedUp, 而在 turboCar class 中 override 這個 method 再加碼時(類似  override 案例的情形) ,那我們也可以這樣寫:
 
// Car 類別 
@interface Car : NSObject 
@property int speed; 
-(void)speedUp;//宣告 speedUp method
@end 
 
@implementation Car
-(void)speedUp{
     self.speed=self.speed+10; //實作每一次加 10
}  
@end 
 
 // Turbo Car 類別 
@interface turboCar : Car 
@end 
 
@implementation turboCar 
-(void)speedUp{    //實作 speedUp,因父 class 宣告過了,所以不用宣告
     [super speedUp];  //執行 父 class 的 method,speed+10
     self.speed=self.speed+10; //再加執行自已的部份 speed 再加 10 一共 20
}  
@end
 
在上面的案例中,第一個寫在 Car 中的 speedUp 用到了 self.speed 其義意就是【我的 speed】,加上10 那就是速度變快了。
 
第二個寫在 turboCar 中的 speedUp 首先執行了 [super speedUp],這不是超級快,而是【請先執行父 class 的 speedUp,也就是 Car 的 speedUp】,執行完了之後,我們才會執行自已的 部份,所以完成 20 的加速。
 
這種技巧經常用在  override 時,特別是用來制訂自訂建構子之類的動作時,經常使用。
 
 
arrow
arrow

    shenfive 發表在 痞客邦 留言(0) 人氣()