IOS学习笔记十(多态)
【摘要】 1、多态
相同类型调用同一个方法呈现多种不同的行为特征就是多态
当子类对象直接赋值给父类指针变量,父类 *p = [子类 new];,运行类型是子类,编译类型是父类,所以p不能调用子类单独实现的方法,如果子类重写了父类方法,p调用的方法会是子类重写的方法
isKindOfClass:clazz
判断该对象是否为clazz...
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
文章来源: chenyu.blog.csdn.net,作者:chen.yu,版权归原作者所有,如需转载,请联系作者。
原文链接:chenyu.blog.csdn.net/article/details/80954163
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)