zoukankan      html  css  js  c++  java
  • Objective-C多继承的实现

    http://www.cnblogs.com/ygm900/archive/2013/01/16/2862678.html

    我们都知道objective C不能像C++一样支持多继承,但是在OC的使用经常会碰到需要使用多继承的情况。例如,ClassA中有methodA,ClassB中 methodB,而现在需要使用这两个类中的方法。如何按照C++的编程思路,毫无疑问采用多继承就搞定了,在OC就需要动动脑子了。

            其实我们在学习设计模式的时候知道,多继承的效率不高,而且采用组合的模式可以完全代替继承模式。那么,这种思路完全可以用在OC 中实现多继承(或许OC抛弃多继承,就是强迫我们使用更高效的组合设计模式吧!)。下面用实际的代码来表示组合如何来代替多继承。

           现在ClassC需要继承ClassA中methodA、ClassB中methodB,具体的代码实现为:

    //定义ClassA以及其methodA

    @interface ClassA : NSObject {
    }

    -(void)methodA;

    @end
    //定义ClassB以及其methodB
    @interface ClassB : NSObject {
    }

    -(void)methodB;

    @end
    //定义ClassC以及其需要的methodA,methodB
    @interface ClassC : NSObject {
      ClassA *a;
      ClassB *b;
    }

    -(id)initWithA:(ClassA *)A b:(ClassB *)B;

    -(void)methodA;
    -(void)methodB;

    @end

    //注意在ClassC的实现

    @implementation  ClassC

    -(id)initWithA:(ClassA *)A b:(ClassB *)B{

           a=[[ClassA alloc] initWithClassA: A];//[A copy];

           b=[[ClassB alloc] initWithClassB: B];//[B copy];

    }

    -(void)methodA{

          [a methodA];

    }
    -(void)methodB{

          [b methodB];

    }

    上面是采用组合的方式实现了多继承的功能,解决了OC不能多继承的语法。那么还有其他的方式来实现多继承吗?

    虽然OC在语法上禁止类使用多继承,但是在协议的遵守上却允许使用多继承。所以可以用协议来实现多继承。但是协议只能提供接口,而没有提供实现方 式,如果只是想多继承基类的接口,那么遵守多协议无疑是最好的方法,而既需要多继承接口,又要多继承其实现,那么协议是无能为力了。多协议遵守比较简单, 具体的实现方式这里就不讲了

  • 相关阅读:
    php集成开发环境搭建三种方式
    阿里云服务器ftp连接后21端口无法使用的问题
    Linux CentOS7 安装FTP服务器
    WIN10分盘
    转载:常见的正则表达式
    转载:什么是分布式系统中的幂等性
    会员通过消费攒积分,升级RENEW以及降级的需求
    CASSANDRA How to import and export data
    tmp for cassandra batch delete
    SQL Insert Case When Update
  • 原文地址:https://www.cnblogs.com/sharkHZ/p/4976950.html
Copyright © 2011-2022 走看看