標籤: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] ----------------