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

转载于:https://www.cnblogs.com/ygm900/archive/2013/01/16/2862678.html

【转】 Objective C实现多继承相关推荐

  1. Objective C的那点小语法

    2019独角兽企业重金招聘Python工程师标准>>> 占坑 1,多继承 (新到一个公司,老同事们都使唤你干活,你什么活都干,过了一段时间) 你发现你既可以做android,你也可以 ...

  2. iOS完全自学手册——[三]Objective-C语言速成,利用Objective-C创建自己的对象...

    1.前言 上一篇已经介绍了App Delegate.View Controller的基本概念,除此之外,分别利用storyboard和纯代码创建了第一个Xcode的工程,并对不同方式搭建项目进行了比较 ...

  3. 关于 继承、扩展和协议,深度好文

    OC中protocol.category和继承的区别以前还是有点迷糊,面试的时候说的有点混乱,现在结合一些资料总结一下. 利用继承,多态是一个很好的保持"对扩展开放.对更改封闭"( ...

  4. OC中protocol、category和继承的区别

    利用继承,多态是一个很好的保持"对扩展开放.对更改封闭"(OCP)的办法,也是最常见的一种方法.Objective C还支持另外两种语法来支持OCP:Protocol和Catego ...

  5. Objective C 基础教程

    复合 使用复合可组合多个对象,使之人工协作. 会同时使用继和复合来创建自己的类. 编程中的复合就好像音乐中的作曲一样:将多个组件组合在一起配合使用. 在Objective-C中,复合是通过包含作为实例 ...

  6. Objective C运行时(runtime)技术总结,好强大的runtime

    前言:          Objective C的runtime技术功能非常强大,能够在运行时获取并修改类的各种信息,包括获取方法列表.属性列表.变量列表,修改方法.属性,增加方法,属性等等,本文对相 ...

  7. Objective C范型

    范型 范型编程是一种程序语言设计范式,它允许程序员在使用强类型的语言编写代码的时候,延迟确定具体的类型. 以Swift代码为例,假如有一个需求是要交换两个int,很容易写出类似代码 func swap ...

  8. 【C++引用超详细笔记, 引用、指针和值传递的汇编级辨析,对象、继承和引用】

    文章目录 引用变量 1. 什么是引用.如何创建一个引用变量? 2. 引用的具体使用方法 2.1 引用做函数的形参 2.2 引用参数的const用法 左值.右值是什么? 2.3 结构体的引用 2.4 引 ...

  9. Objective-C:神在细节之中

    Objective-C:神在细节之中 内容来源:CocoaChina 说明:关于<VIP群福利:天才帝一步应用源代码分享>里面介绍的"天才帝一步"应用上传到AppSto ...

最新文章

  1. 向 Internet Explorer 添加 Google 搜索
  2. 电子自动窗帘系统c语言程序,单片机自动窗帘控制程序(两个电机)
  3. 【协议分析】Wireshark 过滤表达式实例
  4. DLL+ ActiveX控件+WEB页面调用例子
  5. Redis Cluster深入与实践(续)
  6. android怎么监听多点触摸_110寸高清触摸一体机
  7. 解决JavaFX报错缺少 JavaFX 运行时组件, 需要使用该组件来运行此应用程序
  8. java timestamp是什么类型_JAVA比较2个Timestamp类型的时间大小-由此引发的思考
  9. python自动化常用数字_Python全栈自动化系列之Python编程基础(基本数据类型)
  10. Apache yarn入门介绍
  11. appium python很慢_appium+python自动化测试遇到的坑及处理方案
  12. Debian10安装部署DNS服务-正向解析篇
  13. 转行学java被辞退_不是所有行业都是“跳槽穷半年,转行穷三年”,至少转行学Java不是!...
  14. 外汇汇率接口 java_基于java的货币汇率接口调用代码实例
  15. 颜色恒常性评价指标——角度误差【弧度角度】避坑
  16. 欧姆龙e5dc温控器_E5□C(E5AC/E5EC/E5CC/E5DC)温控器如何进行AT自整定?
  17. 设置canvas画布大小
  18. 学习PHP 第七天 die() 函数,及Mysql的操作
  19. 有什么软件可以编译汇编程序?
  20. Mac看源码时,idea插件RESTfultook居然可以这样用?

热门文章

  1. Hadoop HIVE 安装配置(单机集群)
  2. java hashSet
  3. 4.9 内容代价函数
  4. 数据结构之基于Java的顺序队列实现
  5. R语言分类算法之朴素贝叶斯分类(Naive Bayesian Classification)
  6. VCenter配置ESXI主机syslog日志收集
  7. 浅谈数据库发展史和 OceanBase 的诞生
  8. java main 静态代码_java中没有main方法怎么怎么执行静态块中的内容
  9. mysql动态加载数据库数据库_Mysql动态更新数据库脚本的示例讲解
  10. qt设置 阿里巴巴普惠体 英文_怎样把免费的阿里巴巴普惠字体设置为Office全家桶软件主题字体?...