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

來源:互聯網
上載者:User

標籤:

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中類的繼承和組合

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.