標籤:
1.類的定義和聲明
OC中的類聲明是以@interface開始@end結束。
OC中的類定義以@implementation開始@end結束。
OC中的方法聲明:
- (void) setName : (NSString*) strName;前面的短線-表示這是一個方法,(void)表示傳回值, setName表示方法名稱,(NSString*) StrName表示參數是NSString*類型,名稱是strName,注意:()一定要加
OC中的成員變數定義在類聲明的{}中,這一點跟方法聲明不一樣,方法在{}外
OC中的對象建立方法:Animal* animal = [Animal new]; 表明對Animal類調用new方法分配一塊記憶體建立對象。
OC中的方法調用:[animal setName : @"akon"];表明調用對象animal方法setName,傳入參數為akon。
需要注意的是:OC中的方法調用都是以中括弧[]括起來的。
編程好習慣:類名以大寫字母開頭,方法名和變數名字以小寫字母開頭。
例子:
///聲明@interface Animal : NSObject{@privateNSString* strName;}- (void) setName : (NSString*) strName;- (NSString*) getName;@end//定義@implementation Animal- (void) setName : (NSString*) strNameIn{ strName = strNameIn;}- (NSString*) getName{ return strName;}@endint main(int argc, const char * argv[]) { Animal* animal = [Animal new]; [animal setName : @"akon"]; NSString* strName = [animal getName]; NSLog(@"name:%@", strName); return 0;}
2.類的繼承
其實上面例子中的Animal就示範了類的繼承Animal類繼承於NSObject,為了加深印象,分別建立兩個類Cat和Dog繼承於父類Animal,代碼如下:
@interface Animal : NSObject{@privateNSString* strName;}- (void) setName : (NSString*) strName;- (NSString*) getName;- (NSString*) manCallMe;@end@interface Cat : Animal@end@interface Dog : Animal@end#endif
上述Animal類定義了一個方法manCallMe,定義這個方法的意圖是為了實作類別似C++裡面的虛函數,C++裡面是通過虛函數來實現動態綁定的。
那麼OC是如何?動態綁定的呢?只要子類覆蓋父類的方法即可。代碼見下:
//// Animal.m// TestCons//// Created by mac on 15/1/17.// Copyright (c) 2015年 akon. All rights reserved.//#import <Foundation/Foundation.h>#import "Animal.h"@implementation Animal- (void) setName : (NSString*) strNameIn{ strName = strNameIn;}- (NSString*) getName{ return strName;}- (NSString*) manCallMe{ return @"Animal";}@end@implementation Cat- (NSString*) manCallMe{ return @"Cat";}@end@implementation Dog- (NSString*) manCallMe{ return @"Dog";}@end
在建立對象的時候,以id類型儲存對象指標,代碼如下:
int main(int argc, const char * argv[]) { id animal[3]; animal[0] = [Animal new]; [animal[0] setName : @"a"]; animal[1] = [Cat new]; [animal[1] setName : @"b"]; animal[2] = [Dog new]; [animal[2] setName : @"c"]; for (int i = 0; i < 3; ++i) { NSLog(@"getName:%@, manCallMe:%@", [animal[i] getName], [animal[i] manCallMe]); } return 0;}
有的時候子類需要調用父類的方法,如何做,類似於C++__super關鍵字,OC中有有super關鍵字,比如在Cat中調用Animal的manCallMe方法,這樣幹:
[super manCallMe]
3.類的組合
繼承跟組合是複用類的兩種方法,那麼什麼時候用繼承什麼時候用組合呢?繼承強調的是"是一種"關係,比如貓是動物的一種,夠是動物的一種。那麼貓和狗就應該繼承於動物。組合強調的是‘‘有‘‘的關係,比如動物有腿,有眼睛,那類動物就應該組合腿和眼睛。
組合的實現很簡單,就是簡單地把方法調用委託給被組合類別。比如動物類有個方法‘"放電",那麼這個方法的實現就可以調用眼睛的放電方法來實現。由於很簡單,代碼就不上了。
Objective-C基礎1:OC中類的繼承和組合