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)階人工智能(鏈接)