1

假设 Bob 是人类男性

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

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

@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

然后我重新实现了 -(void) growBeard; -(无效)玩视频游戏;

照常。但是会调用哪一个呢?长胡子,玩视频游戏等?

4

3 回答 3

5

您是对的-您可以从一个(或没有)继承,而不是从多个类继承,并通过调整协议继承其余部分。如果humanmale在逻辑上处于同一级别,您可能希望将它们都设为协议,如下所示:

@interface Bob : NSObject <human,male>

如果您需要共享实现,请在human和上定义类别male,并将实现放在那里。这将产生类似于将方法添加到Bob.

于 2013-06-07T10:20:19.117 回答
0

另一种选择是让 NormalMale 子类 Male 反过来又子类 Human。这完全取决于数据的逻辑结构。不要忘记您也有一些类别,这些类别有时在此类情况下很有用。

于 2013-06-07T13:39:01.727 回答
0

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

这是协议的好教程

于 2013-06-07T10:20:37.903 回答