IOS學(xué)習(xí)筆記十(多態(tài))
1、多態(tài)
相同類型調(diào)用同一個(gè)方法呈現(xiàn)多種不同的行為特征就是多態(tài)
當(dāng)子類對(duì)象直接賦值給父類指針變量,父類 *p = [子類 new];,運(yùn)行類型是子類,編譯類型是父類,所以p不能調(diào)用子類單獨(dú)實(shí)現(xiàn)的方法,如果子類重寫了父類方法,p調(diào)用的方法會(huì)是子類重寫的方法
isKindOfClass:clazz
判斷該對(duì)象是否為clazz或者其子類的實(shí)例
2、測(cè)試demo
KFBase.h
#import <Foundation/Foundation.h>
#ifndef KFBase_h
#define KFBase_h
@interface KFBase : NSObject
-(void)base;
-(void)test;
@end
#endif /* KFBase_h */
KFBase.m
#import <Foundation/Foundation.h>
#import "KFBase.h"
@implementation KFBase
-(void)base
{
NSLog(@"parent base method");
}
-(void)test
{
NSLog(@"parent test method");
}
@end
SubClass.h
#import "KFBase.h"
#ifndef Subclass_h
#define Subclass_h
@interface Subclass : KFBase
-(void)sub;
-(void)test;
@end
#endif /* Subclass_h */
SubClass.m
#import <Foundation/Foundation.h>
#import "Subclass.h"
@implementation Subclass
-(void)sub
{
NSLog(@"child sub method");
}
-(void)test
{
NSLog(@"chile test method");
}
@end
main.m
#import "KFBase.h"
#import "Subclass.h"
int main(int argc, char * argv[]) {
@autoreleasepool {
KFBase *base = [KFBase new];
[base base];
[base test];
Subclass *sub = [Subclass new];
[sub base];
[sub test];
[sub sub];
KFBase *seBase = [Subclass new];
[seBase base];
[seBase test];
//下面運(yùn)行會(huì)編譯出錯(cuò)
// [seBase sub];
id dy = seBase;
[dy sub];
NSLog(@"sub是KFBase的子類嗎?%d",[sub isKindOfClass:[KFBase class]]);
}
}
3、運(yùn)行結(jié)果
parent base method
parent test method
parent base method
chile test method
child sub method
parent base method
chile test method
child sub method
sub是KFBase的子類嗎?1
作者:chen.yu
深信服三年半工作經(jīng)驗(yàn),目前就職游戲廠商,希望能和大家交流和學(xué)習(xí),
微信公眾號(hào):編程入門到禿頭 或掃描下面二維碼
零基礎(chǔ)入門進(jìn)階人工智能(鏈接)