IOS学习笔记十(多态)

举报
chenyu 发表于 2021/07/27 01:47:18 2021/07/27
2k+ 0 0
【摘要】 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

抱歉,系统识别当前为高风险访问,暂不支持该操作

    全部回复

    上滑加载中

    设置昵称

    在此一键设置昵称,即可参与社区互动!

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。