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

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

Object-c的类不可以多重继承;可以实现多个接口,通过实现多个接口可以完成C++的多重继承;虽然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];

}

时间: 2024-10-28 07:42:34

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

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是所有类的始祖,java中的每个类的都是它拓展而来的. Object的euqals方法.hashCode方法.getClass方法和toString方法在操作对象时是非常有用的方法.     1.euqals方法      euqals方法用于检测一个对象是否等于另外一个对象(两个对象是否指向同一块存储区域),java语言规范要求euqals方法具有以下特性: 自反性.对称性.传递性.一致性并且对于任意的非空引用x,x.equals(null)应返回false. java7在java

是否存在不继承自System.Object类型的类

分析问题 可能读者的固有思维认为.NET中所有的类型都必须继承自System.Object,这样的认识过于绝对,且不完全正确.在.NET中,.NET设计小组为中间语言的编译器ILasm.exe添加了noautoinherit开关,当这个开关被打开时,编译器将不会默认年地把类型认为继承自System.Object. 首先介绍一下中间语言的编译工具:ILasm.exe.这是.NET Framework提供的一个编译工具,它的作用是把中间语言(MSIL)编译成可执行的PE文件.该工具非常有用,它不仅使

eclipse环境Dynamic web module version 3.1版本的进步,简化Dynamic web object 中Servlet类的配置,不用web.xml配置&lt;Servlet&gt;

eclipse环境Dynamic web module version 3.1版本之前,Dynamic web object 中Servlet类的配置,要在web.xml 配置<Servlet>图片和代码如下: web.xml中源代码如下: <?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-ins

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

答:Object-c的类不可以多重继承,可以实现多个接口(协议),Category是类别,重写一个类的方式一般用分类更好,仅仅对分类有效,不会影响到其他类与原有类的关系.category的主要作用是为已经存在的类添加方法.除此之外,apple官方还推荐了另外两种使用场景: 1.可以把类的实现分开在几个不同的文件,这样做有几个显而易见的好处:第一,可以减少单个文件的体积.第二,可以不同功能的组织放到不同的category中去.第三,可以由多个不同的开发者来共同完成一个类.第三,可以按需要来加载不同

我的java学习笔记(9)关于Object:所有类的超类

1.Object类是java所有类的始祖,java中的每一个类都是由它扩展而来的. 2.如果没有明确的指出超类,Object就被认为是这个类的超类. class a extends Object class a //可以缺省 3.可以使用Object类型变量引用任何类型的对象. Object e = new Employee("w1",100,1988,1,1); 4.在java中,只有基本类型不是对象,数组类型,不管是对象数组还是基本而类型的数组都可扩展于Object类. int[]

C++ 空类与多重继承的空类占用内存空间

1.输出以代码结果 #include <iostream> using namespace std; class A {}; class A2 {}; class B : public A {}; class C : public A, public A2 {}; class D : public virtual B {}; int main() { cout << sizeof(A) << endl; cout << sizeof(B) <<