self 與 super
在編寫物件導向的程式,都有類似的概念,就是對自已或父類別做為發送訊息(使用方法)的對像,在 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 的加速。