Objective-C多重继承

Dil*_*han 88 inheritance objective-c multiple-inheritance

我有2个类,一个包括methodA,另一个包括methodB.所以在一个新类中我需要覆盖方法methodA和methodB.那么如何在目标C中实现多重继承呢?我对语法有点困惑.

d11*_*wtq 135

Objective-C不支持多重继承,您不需要它.使用成分:

@interface ClassA : NSObject {
}

-(void)methodA;

@end

@interface ClassB : NSObject {
}

-(void)methodB;

@end

@interface MyClass : NSObject {
  ClassA *a;
  ClassB *b;
}

-(id)initWithA:(ClassA *)anA b:(ClassB *)aB;

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

@end
Run Code Online (Sandbox Code Playgroud)

现在您只需要在相关的ivar上调用该方法.这是更多的代码,但是在Objective-C中没有多重继承作为语言特性.

  • 组合通常是一种比继承更好的方法,特别是如果你对代码进行了大量的单元测试.它提供了更大的灵活性,您可以轻松地交换实现而无需重新定义类本身.当您想要将ClassA和ClassB替换为模拟对象时,特别方便.即使在运行时,交换实现(例如FTPFileStore vs LocalFileStore)也会变得更加清晰.这并不意味着继承没有它的位置,但是需要多重继承会表明我重新思考我的设计;) (8认同)