国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Objective-C基礎1:OC中類的繼承和組合

2019-11-14 19:38:33
字體:
來源:轉載
供稿:網友

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.類的組合

繼承跟組合是復用類的兩種方法,那么什么時候用繼承什么時候用組合呢?繼承強調的是"是一種"關系,比如貓是動物的一種,夠是動物的一種。那么貓和狗就應該繼承于動物。組合強調的是''有''的關系,比如動物有腿,有眼睛,那類動物就應該組合腿和眼睛。

組合的實現很簡單,就是簡單地把方法調用委托給被組合類。比如動物類有個方法'"放電",那么這個方法的實現就可以調用眼睛的放電方法來實現。由于很簡單,代碼就不上了。


上一篇:「OC」基本語法

下一篇:Xcode常用快捷鍵

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 榆林市| 台北县| 陵水| 南靖县| 武功县| 舞钢市| 宝坻区| 如皋市| 平凉市| 泗水县| 甘肃省| 伊吾县| 禄劝| 昂仁县| 延安市| 溆浦县| 汝南县| 嘉善县| 阿图什市| 康乐县| 石首市| 大方县| 安国市| 无锡市| 菏泽市| 巴青县| 乌兰浩特市| 石景山区| 贺州市| 景洪市| 社旗县| 庆阳市| 永定县| 桦南县| 高淳县| 曲阜市| 曲水县| 会宁县| 买车| 长兴县| 汾阳市|