- 繼承和派生
繼承是指一個(gè)新類擁有全部被繼承類的屬性和方法,通過(guò)繼承產(chǎn)生新類的過(guò)程也稱作派生加勤。
派生: 由子類創(chuàng)建的方法或者屬性仙辟。子類除了繼承之外的屬性和方法。派生的目的是擴(kuò)展鳄梅、修改父類的功能欺嗤。
繼承機(jī)制使得新類不僅有自己特有的屬性和方法,而且有被繼承類的全部屬性和方法卫枝。
說(shuō)明:
1)基類的私有屬性能被繼承,不能被使用煎饼。
2)OC中的繼承是單繼承:也就是說(shuō)一個(gè)類只能一個(gè)父類,不能繼承多個(gè)父類
2.實(shí)例變量的修飾符
詳細(xì)說(shuō)明如下:
1)@public (公開的)在有對(duì)象的前提下,任何地方都可以直接訪問。
2)@protected (受保護(hù)的)只能在當(dāng)前類和子類的對(duì)象方法中訪問 (默認(rèn)訪問權(quán)限)
3)@private (私有的)只能在當(dāng)前類的對(duì)象方法中才能直接訪問
4)@package (框架級(jí)別的)作用域介于私有和公開之間,只要處于同一個(gè)框架中就可以直接通 過(guò)變量名訪問
3.方法的重寫
重寫就是從父類繼承的方法,不適用于子類時(shí),可以直接聲明父類的同名方法,并定義校赤。 不用考慮父類中,方法已存在的問題吆玖。 重寫后,子類可以通過(guò)super調(diào)用父類的方法。
4.多態(tài)
多態(tài):父類的指針可以指向子類的對(duì)象马篮,而子類的指針不能指向父類的對(duì)象沾乘。
多態(tài)常與isKindOfClass、isMemberOfClass結(jié)合起來(lái)用
多態(tài)的實(shí)現(xiàn)是通過(guò)子類重寫父類方法浑测,建立一個(gè)父類的對(duì)象用子類初始化翅阵。父類對(duì)象調(diào)用方法時(shí)將實(shí)現(xiàn)子類中重寫的父類方法。
#import <Foundation/Foundation.h>
@interface Animal : NSObject
- (void)barkWith:(NSString *)animalName;
@end
#import "Animal.h"
@implementation Animal
-(void) barkWith:(NSString *)animalName {
NSLog(@"父類 %@ is barking",animalName);
}
@end
#import "Animal.h"
@interface Bull : Animal
@end
#import <Foundation/Foundation.h>
#import "Animal.h"
#import "Bull.h"
#import "Sheep.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
// 多態(tài): 父類的指針可以指向子類的對(duì)象迁央,而子類的指針不能指向父類的對(duì)象
// 多態(tài)常與isKindOfClass掷匠、isMemberOfClass結(jié)合起來(lái)用
Animal * a = [[Bull alloc]init];
[a barkWith:@"哞哞"];
// 錯(cuò)誤用法
// Bull * b = [[Animal alloc]init];
// [b barkWith:@"小牛"];
}
return 0;
}