Objective-C-類(static)方法、執行個體方法、overwrite(覆寫)、屬性(property)複習

來源:互聯網
上載者:User

標籤:blog   os   io   ar   cti   div   line   log   

先來定義一個Human父類

定義部分:

1234567891011121314151617181920 ////  Human.h//  OOP////  Created by jimmy.yang on 11-2-9.//  Copyright 2011 __MyCompanyName__. All rights reserved.// #import <Foundation/Foundation.h>  @interface Human : NSObject {    BOOL sex;} +(void) toString; -(void) showSex; @end

註:+(void)前的加號,就表示這一個是類方法(static 方法),而-(void)表示這是一個執行個體方法

實現部分:

注意:下面的 -(id) init 即為建構函式。對應的,還有一個-(void)dealloc方法用來釋放資源(類似於解構函式或c#中的dispose()方法)-註:dealloc方法以後在記憶體管理中詳細學習,這裡先不管它。

123456789101112131415161718192021222324252627282930313233343536 ////  Human.m//  OOP////  Created by jimmy.yang on 11-2-9.//  Copyright 2011 __MyCompanyName__. All rights reserved.// #import "Human.h"  @implementation Human //建構函式-(id) init{    NSLog(@"init() in Human is called");    sex = TRUE;    return(self);} //static類方法+ (void)toString{    NSLog(@"this is a class method of Human");}  //執行個體方法- (void)showSex{    NSLog(@"my sex is %@",[email protected]"MALE":@"FEMALE");}  @end

再來定義一個Woman子類

定義部分:

1234567891011121314151617181920212223 ////  Woman.h//  OOP////  Created by jimmy.yang on 11-2-9.//  Copyright 2011 __MyCompanyName__. All rights reserved.// #import <Foundation/Foundation.h>#import "Human.h"  @interface Woman : Human {    BOOL married;} -(void) canCook:(NSString*) foodName; -(void) setMarried:(BOOL)m; -(BOOL) Married; @end

實現部分:

注意下面的:setMarried 與 Married 就是obj-C中屬性的標準寫法(當然以後還能看到其它簡化的寫法)

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 ////  Woman.m//  OOP////  Created by jimmy.yang on 11-2-9.//  Copyright 2011 __MyCompanyName__. All rights reserved.// #import "Woman.h"  @implementation Woman //Woman類的建構函式-(id) init{    NSLog(@"init() in Woman is called!");    if (self==[super init]){        sex = FALSE;        married = FALSE;    }    return (self);} //overwrite父類中的toString()+(void)toString{    NSLog(@"This is Woman‘s ToString()");} //Woman能做飯-(void)canCook:(NSString*) foodName{    NSLog(@"I can cook %@",foodName);} //屬性的setter-(void) setMarried:(BOOL)m{    married = m;} //屬性的getter-(BOOL) Married{    return married;} @end

main方法中的調用:

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 #import <Foundation/Foundation.h>#import "Human.h"#import "Woman.h" int main (int argc, const char * argv[]) {    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];     // insert code here...    NSLog(@"Hello, World!");         //調用類的“靜態”方法    [Human toString];         NSLog(@"----------------");         //創造一個Human的執行個體    Human *man = [Human new];         //調用man的showSex方法    [man showSex];         NSLog(@"----------------");         //定義一個Woman子類的執行個體    Woman *wife = [Woman new];    [wife canCook:@"Rice"];         //調用繼承自父類的方法    [wife showSex];         //設定屬性    [wife setMarried:TRUE];         //讀取屬性值    NSLog(@"wife‘s married = %@",wife.Married==NO[email protected]"FALSE":@"TRUE");         NSLog(@"----------------");         //調用overwrite後的toString方法    [Woman toString];              //Factory模式中常用的手法,在這裡依然適用(只不過編譯時間會有警告 ‘Human‘ may not respond to ‘-canCook:‘)    Human *wife2 = [Woman new];    [wife2 canCook:@"soap"];                   NSLog(@"----------------");         [pool drain];    return 0;}

 運行結果:

2011-02-09 17:01:02.016 OOP[1725:a0f] Hello, World!
2011-02-09 17:01:02.053 OOP[1725:a0f] this is a class method of Human
2011-02-09 17:01:02.062 OOP[1725:a0f] ----------------
2011-02-09 17:01:02.075 OOP[1725:a0f] init() in Human is called
2011-02-09 17:01:02.091 OOP[1725:a0f] my sex is MALE
2011-02-09 17:01:02.094 OOP[1725:a0f] ----------------
2011-02-09 17:01:02.099 OOP[1725:a0f] init() in Woman is called!
2011-02-09 17:01:02.104 OOP[1725:a0f] init() in Human is called
2011-02-09 17:01:02.105 OOP[1725:a0f] I can cook Rice
2011-02-09 17:01:02.108 OOP[1725:a0f] my sex is FEMALE
2011-02-09 17:01:02.109 OOP[1725:a0f] wife‘s married = TRUE
2011-02-09 17:01:02.111 OOP[1725:a0f] ----------------
2011-02-09 17:01:02.116 OOP[1725:a0f] This is Woman‘s ToString()
2011-02-09 17:01:02.120 OOP[1725:a0f] init() in Woman is called!
2011-02-09 17:01:02.121 OOP[1725:a0f] init() in Human is called
2011-02-09 17:01:02.123 OOP[1725:a0f] I can cook soap
2011-02-09 17:01:02.125 OOP[1725:a0f] ----------------

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.