Object-C的类可以多重继承吗?可以实现多个接口吗?category是什么?重写一个类的方式用继承好还是分类好,为什么?

答:Object-c的类不可以多重继承,可以实现多个接口(协议),Category是类别,重写一个类的方式一般用分类更好,仅仅对分类有效,不会影响到其他类与原有类的关系。category的主要作用是为已经存在的类添加方法.除此之外,apple官方还推荐了另外两种使用场景:

1.可以把类的实现分开在几个不同的文件,这样做有几个显而易见的好处:第一,可以减少单个文件的体积。第二,可以不同功能的组织放到不同的category中去。第三,可以由多个不同的开发者来共同完成一个类。第三,可以按需要来加载不同的category等等。

2.声明私有方法。

除了apple推荐的场景,开发者还衍生出了其他使用场景:

1.模拟多重继承。

2.把framework的私有方法公开。

原文地址:https://www.cnblogs.com/howlaa/p/9995972.html

时间: 2024-08-05 03:32:22

Object-C的类可以多重继承吗?可以实现多个接口吗?category是什么?重写一个类的方式用继承好还是分类好,为什么?的相关文章

一个类有多大

#include <iostream> using namespace std; class A{}; class B { int b; char c; }; class C { int c1; static int c2; }; int C::c2 = 1; class D:public C,public B{ int d; }; int main() { cout<<"sizeof(A)="<<sizeof(A)<<endl; cou

emberjs重写补充类之reopen方法和reopenClass方法

无需一次性将类定义完全,你可以使用reopen方法来重新打开(reopen)一个类并为其定义新的属性. Person.reopen({ isPerson: true }); Person.create().get('isPerson') // true 当使用reopen时,你也同样可以覆写已经存在的方法并调用this._super. Person.reopen({ // override `say` to add an ! at the end say: function(thing) { t

为什么提供私有的构造器能保证一个类只有一个实例(有待深入)

1.在我们新建一个类的对象的时候,构造器创建对象后会自动被调用,发生在其他类成员被设置为默认初始值之后,当然如果有字段初始器和初始化块的话,构造器的调用会发生在此之后.构造器的主要作用是在new将对象的引用返回之前初始化对象. 2.其访问权限是private,于是它只能被包含它的类自身所访问,而无法在类的外部调用,故而可以阻止对象的生成.所以,如果一个类只有一个私有构造器,而没有任何公有构造器,是无法生成任何对象的. 3.那么无法生成对象的带有私有构造器的类究竟有什么作用呢?这样的类在实际应用中

Object-c的类可以多重继承么?可以实现多个接口么?如何实现?

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

python 类 五 : 多重继承的MRO顺序

这个系列的讲述,部分内容或者例子来自 <<python 核心编程 第二版>> python 的类有经典类和新式类之分,在多重继承的时候,继承到的方法的搜索的顺序根据类的类型不同也是不同的. 先来讲经典类: 经典类的特点就是不继承自任何类: #coding:utf-8 class p_1:     def foo(self):         print 'called p1-foo()' class p_2:     def foo(self):         print 'ca

类的多重继承

假设我们要实现以下4种动物: Dog - 狗狗: Bat - 蝙蝠: Parrot - 鹦鹉: Ostrich - 鸵鸟. 按类型可以分类:哺乳动物,鸟类 按功能可以分类: 会飞的,会跑的 使用类的多重继承: class Animal(object): pass # 大类: class Mammal(Animal): pass class Bird(Animal): pass 再设计两个功能类: class Runnable(object): def run(self): print('Runn

虚基类练习:动物(利用虚基类建立一个类的多重继承,包括动物(animal,属性有体长,体重和性别),陆生动物(ter_animal,属性增加了奔跑速度),水生动物(aqu_animal,属性增加了游泳速度)和两栖动物(amp_animal)。)

Description 长期的物种进化使两栖动物既能活跃在陆地上,又能游动于水中.利用虚基类建立一个类的多重继承,包括动物(animal,属性有体长,体重和性别),陆生动物(ter_animal,属性增加了奔跑速度),水生动物(aqu_animal,属性增加了游泳速度)和两栖动物(amp_animal).其中两栖动物保留了陆生动物和水生动物的属性. Input 两栖动物的体长,体重,性别,游泳速度,奔跑速度(running_speed) Output 初始化的两栖动物的体长,体重,性别,游泳速度

把一个类(或者Object)转换成字典

直接上代码:把一个类转换成object,然后在转换成字典 1 internal static IDictionary<string, string> GetDictionary(this object source) 2 { 3 if (source == null) 4 { 5 return new Dictionary<string, string>(); 6 } 7 PropertyDescriptorCollection properties = TypeDescripto

C#利用反射,遍历获得一个类的所有属性名,以及该类的实例的所有属性的值

转自goldeneyezhang原文 C#利用反射,遍历获得一个类的所有属性名,以及该类的实例的所有属性的值 C#利用反射,遍历获得一个类的所有属性名,以及该类的实例的所有属性的值总结: 对应某个类的实例化的对象tc, 遍历获取所有属性(子成员)的方法(采用反射): Type t = tc.GetType();//获得该类的Type //再用Type.GetProperties获得PropertyInfo[],然后就可以用foreach 遍历了 foreach (PropertyInfo pi