一、成員訪問類型框架
private:私有成員,不能被外部函數訪問(使用),也不能被子類繼承;函數
protected:保護成員,不能被外部函數訪問,能夠被子類繼承;spa
public:公有成員,能夠被外部函數訪問,也能夠被子類繼承。指針
OC中,全部的方法(消息),都是公有的。code
二、重寫(繼承的另外一部分)對象
子類能夠從父類繼承方法,可是有時候父類的方法不適合子類,子類就能夠寫一個本身的同名方法,覆蓋掉父類的同名方法,叫作重寫。blog
重寫的時候,在子類的.h中沒必要從新聲明,直接在.m中寫實現就能夠。繼承
1 //父類聲明文件 2 #import <Foundation/Foundation.h> 3 @interface Father : NSObject 4 -(void)run; 5 -(void)jump; 6 @end 7 8 //父類實現文件 9 #import "Father.h" 10 @implementation Father 11 -(void)run{ 12 NSLog(@"he is running!"); 13 return; 14 } 15 -(void)jump{ 16 NSLog(@"father can jump 1.2m"); 17 } 18 @end
1 //子類聲明文件 2 #import "Father.h" 3 4 @interface Son : Father 5 6 @end 7 8 //子類實現文件 9 #import "Son.h" 10 11 @implementation Son 12 -(void)jump{ 13 NSLog(@"he can jump 0.6m"); 14 } 15 @end
其中,子類重寫父類的jump方法,不須要從新聲明。事件
同一個方法,不一樣的實現,稱爲多態。重寫是多態的一種。it
繼承的好處:
1)建立大量的類似類的時候,能夠節省工做量。
2)使用框架中的類,或已經寫好的類,繼承該類,生成一個派生類,比原類更好用。
注意:NSString、NSArray、NSDictionary都是不可以繼承的。
三、虛方法
OC的方法都是虛方法
1)父類的指針能夠指向子類的對象
1 Son * son = [[Son alloc] init]; 2 Father * p = son;
上面p和son都指向子類的對象;調用方法時,不看指針,看對象,對象的地址指向什麼對象,就調用什麼方法,稱爲虛方法。
2)調用方法時,不看指針看對象,這樣的方法叫作虛方法。虛方法的好處:能夠描述不一樣事物被相同事件觸發,產生不一樣的響應(結果)。體會下面的例子
動物的父類聲明與實現
1 //動物類聲明 2 #import <Foundation/Foundation.h> 3 @interface Animal : NSObject 4 -(void)beBeaten; 5 @end
1 //動物類實現 2 #import "Animal.h" 3 @implementation Animal 4 -(void)beBeaten{ 5 return; //該方法須要子類實現,因此父類不須要寫任何實現代碼 6 } 7 @end
子類(狗)的聲明與實現
1 #import "Animal.h" 2 3 @interface Dog : Animal 4 5 @end
1 #import "Dog.h" 2 3 @implementation Dog 4 //該方法在父類已經聲明,因此子類不須要重複聲明 5 -(void)beBeaten{ 6 NSLog(@"wang,wang..."); 7 } 8 @end
子類(貓)的聲明與實現
1 #import "Animal.h" 2 3 @interface Cat : Animal 4 5 @end
1 #import "Cat.h" 2 3 @implementation Cat 4 //該方法在父類已經聲明,因此子類不須要重複聲明 5 -(void)beBeaten{ 6 NSLog(@"miao,miao..."); 7 } 8 @end
人類的聲明與實現
1 #import <Foundation/Foundation.h> 2 #import "Animal.h" 3 @interface Human : NSObject 4 //調用該方法,此處只寫一個父類的指針就能夠,這是利用了父類的虛方法; 5 //否則,須要寫多個方法實現:beatAnimal:(Dog *)dog;beatAnimal:(Cat *)cat;打不一樣的動物須要傳不一樣的對象,因此利用虛方法、父類的指針是很是方便的 6 -(void)beatAnimal:(Animal*)animal; 7 @end
1 #import "Human.h" 2 3 @implementation Human 4 -(void)beatAnimal:(id)animal{ 5 NSLog(@"Human beat the %@",[animal class]); 6 [animal beBeaten]; 7 } 8 @end
1 Dog * dog = [[Dog alloc] init]; 2 Cat * cat = [[Cat alloc] init]; 3 Human * xiaoming = [[Human alloc] init]; 4 [xiaoming beatAnimal:dog]; 5 [xiaoming beatAnimal:cat]; 6 //輸出: 7 //2013-09-29 15:51:00.604 OC[752:303] Human beat the Dog 8 //2013-09-29 15:51:00.619 OC[752:303] wang,wang... 9 //2013-09-29 15:51:00.620 OC[752:303] Human beat the Cat 10 //2013-09-29 15:51:00.621 OC[752:303] miao,miao...
結題!!!