IOS学习笔记十(多态)

1、多态

相同类型调用同一个方法呈现多种不同的行为特征就是多态

当子类对象直接赋值给父类指针变量,父类 *p = [子类 new];,运行类型是子类,编译类型是父类,所以p不能调用子类单独实现的方法,如果子类重写了父类方法,p调用的方法会是子类重写的方法

 

 

 

isKindOfClass:clazz

判断该对象是否为clazz或者其子类的实例

 

 

 

 

 

 

2、测试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];
        //下面运行会编译出错
//        [seBase sub];
        id dy = seBase;
        [dy sub];
		NSLog(@"sub是KFBase的子类吗?%d",[sub isKindOfClass:[KFBase class]]);
    }
}

 

 

 

 

 

 

 

3、运行结果

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

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码莎拉蒂 .

你的鼓励是我最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值