- 繼承和派生
繼承是指一個新類擁有全部被繼承類的屬性和方法,通過繼承產生新類的過程也稱作派生。
派生: 由子類創建的方法或者屬性。子類除了繼承之外的屬性和方法。派生的目的是擴展、修改父類的功能。
繼承機制使得新類不僅有自己特有的屬性和方法,而且有被繼承類的全部屬性和方法。
說明:
1)基類的私有屬性能被繼承,不能被使用。
2)OC中的繼承是單繼承:也就是說一個類只能一個父類,不能繼承多個父類
2.實例變量的修飾符
詳細說明如下:
1)@public (公開的)在有對象的前提下,任何地方都可以直接訪問。
2)@protected (受保護的)只能在當前類和子類的對象方法中訪問 (默認訪問權限)
3)@private (私有的)只能在當前類的對象方法中才能直接訪問
4)@package (框架級別的)作用域介于私有和公開之間,只要處于同一個框架中就可以直接通 過變量名訪問
3.方法的重寫
重寫就是從父類繼承的方法,不適用于子類時,可以直接聲明父類的同名方法,并定義。 不用考慮父類中,方法已存在的問題。 重寫后,子類可以通過super調用父類的方法。
4.多態
多態:父類的指針可以指向子類的對象,而子類的指針不能指向父類的對象。
多態常與isKindOfClass、isMemberOfClass結合起來用
多態的實現是通過子類重寫父類方法,建立一個父類的對象用子類初始化。父類對象調用方法時將實現子類中重寫的父類方法。
#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 {
// 多態: 父類的指針可以指向子類的對象,而子類的指針不能指向父類的對象
// 多態常與isKindOfClass、isMemberOfClass結合起來用
Animal * a = [[Bull alloc]init];
[a barkWith:@"哞哞"];
// 錯誤用法
// Bull * b = [[Animal alloc]init];
// [b barkWith:@"小牛"];
}
return 0;
}