什么是Objective-c中多重继承的好方法?

时间:2013-06-07 10:13:50

标签: objective-c

说鲍勃是一个人类男性

所以我继承了人类和男性。

现在说我想将人类作为继承来实现

@interface BobLike : human 

然后我想创建一个男性协议

@protocol male

所以,

我们得到了

@interface BobLike : human <male>

好的,到目前为止一切顺利。我可以通过将男性接口放在协议中来创建类似行为的类。像

这样的东西
@protocol male
-(void) growBeard;
-(void) playVideoGames;
@end

@interface human (male) <male>

@end

BobLike

将享受growBeard和playVideogames的实现

如果后者我想继承男性呢?假设我想创建另一个名为normalMale

的“类对象”

说normalMale有更长的胡须,因此我会覆盖

@protocol normalMale :male
//-(void) growBeard; //No need to be declared because we already declare that as in male protocol
//-(void) playVideoGames; //No need to be declared because we already declare that as in male protocol
@end

@interface NSObject (singleton) <male>

@end
@end

@interface human (normalMale) <normalMale>

@end

然后我重新实现了      - (无效)growBeard;      - (void)playVideoGames;

像往常一样。但是哪一个会被称为? growBeard,playVideoGames等?

3 个答案:

答案 0 :(得分:5)

你是对的 - 你可以从一个(或没有)继承,而不是从多个类继承,并通过适应协议继承其余的。如果humanmale在逻辑上处于同一级别,您可能希望同时制作这两个协议,如下所示:

@interface Bob : NSObject <human,male>

如果您需要共享实施,请在humanmale上定义类别,并将实施放在那里。这会产生类似于向Bob添加方法的效果。

答案 1 :(得分:0)

像JAVA一样,Objective-C不支持多重继承。但是在java接口中提供了多重继承的替代方法,提供了目标C协议作为多重继承的替代方案。所以你可以在这里使用协议。

这是好tutorial of Protocols

答案 2 :(得分:0)

另一个选择是使NormalMale子类为Male,而子类又是Human。这完全取决于数据的逻辑结构。不要忘记你也有类别,有时在这种情况下有用。