【转】 Objective C实现多继承
我们都知道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实现多继承相关推荐
- Objective C的那点小语法
2019独角兽企业重金招聘Python工程师标准>>> 占坑 1,多继承 (新到一个公司,老同事们都使唤你干活,你什么活都干,过了一段时间) 你发现你既可以做android,你也可以 ...
- iOS完全自学手册——[三]Objective-C语言速成,利用Objective-C创建自己的对象...
1.前言 上一篇已经介绍了App Delegate.View Controller的基本概念,除此之外,分别利用storyboard和纯代码创建了第一个Xcode的工程,并对不同方式搭建项目进行了比较 ...
- 关于 继承、扩展和协议,深度好文
OC中protocol.category和继承的区别以前还是有点迷糊,面试的时候说的有点混乱,现在结合一些资料总结一下. 利用继承,多态是一个很好的保持"对扩展开放.对更改封闭"( ...
- OC中protocol、category和继承的区别
利用继承,多态是一个很好的保持"对扩展开放.对更改封闭"(OCP)的办法,也是最常见的一种方法.Objective C还支持另外两种语法来支持OCP:Protocol和Catego ...
- Objective C 基础教程
复合 使用复合可组合多个对象,使之人工协作. 会同时使用继和复合来创建自己的类. 编程中的复合就好像音乐中的作曲一样:将多个组件组合在一起配合使用. 在Objective-C中,复合是通过包含作为实例 ...
- Objective C运行时(runtime)技术总结,好强大的runtime
前言: Objective C的runtime技术功能非常强大,能够在运行时获取并修改类的各种信息,包括获取方法列表.属性列表.变量列表,修改方法.属性,增加方法,属性等等,本文对相 ...
- Objective C范型
范型 范型编程是一种程序语言设计范式,它允许程序员在使用强类型的语言编写代码的时候,延迟确定具体的类型. 以Swift代码为例,假如有一个需求是要交换两个int,很容易写出类似代码 func swap ...
- 【C++引用超详细笔记, 引用、指针和值传递的汇编级辨析,对象、继承和引用】
文章目录 引用变量 1. 什么是引用.如何创建一个引用变量? 2. 引用的具体使用方法 2.1 引用做函数的形参 2.2 引用参数的const用法 左值.右值是什么? 2.3 结构体的引用 2.4 引 ...
- Objective-C:神在细节之中
Objective-C:神在细节之中 内容来源:CocoaChina 说明:关于<VIP群福利:天才帝一步应用源代码分享>里面介绍的"天才帝一步"应用上传到AppSto ...
最新文章
- 向 Internet Explorer 添加 Google 搜索
- 电子自动窗帘系统c语言程序,单片机自动窗帘控制程序(两个电机)
- 【协议分析】Wireshark 过滤表达式实例
- DLL+ ActiveX控件+WEB页面调用例子
- Redis Cluster深入与实践(续)
- android怎么监听多点触摸_110寸高清触摸一体机
- 解决JavaFX报错缺少 JavaFX 运行时组件, 需要使用该组件来运行此应用程序
- java timestamp是什么类型_JAVA比较2个Timestamp类型的时间大小-由此引发的思考
- python自动化常用数字_Python全栈自动化系列之Python编程基础(基本数据类型)
- Apache yarn入门介绍
- appium python很慢_appium+python自动化测试遇到的坑及处理方案
- Debian10安装部署DNS服务-正向解析篇
- 转行学java被辞退_不是所有行业都是“跳槽穷半年,转行穷三年”,至少转行学Java不是!...
- 外汇汇率接口 java_基于java的货币汇率接口调用代码实例
- 颜色恒常性评价指标——角度误差【弧度角度】避坑
- 欧姆龙e5dc温控器_E5□C(E5AC/E5EC/E5CC/E5DC)温控器如何进行AT自整定?
- 设置canvas画布大小
- 学习PHP 第七天 die() 函数,及Mysql的操作
- 有什么软件可以编译汇编程序?
- Mac看源码时,idea插件RESTfultook居然可以这样用?
热门文章
- Hadoop HIVE 安装配置(单机集群)
- java hashSet
- 4.9 内容代价函数
- 数据结构之基于Java的顺序队列实现
- R语言分类算法之朴素贝叶斯分类(Naive Bayesian Classification)
- VCenter配置ESXI主机syslog日志收集
- 浅谈数据库发展史和 OceanBase 的诞生
- java main 静态代码_java中没有main方法怎么怎么执行静态块中的内容
- mysql动态加载数据库数据库_Mysql动态更新数据库脚本的示例讲解
- qt设置 阿里巴巴普惠体 英文_怎样把免费的阿里巴巴普惠字体设置为Office全家桶软件主题字体?...