说鲍勃是一个人类男性
所以我继承了人类和男性。
现在说我想将人类作为继承来实现
@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等?答案 0 :(得分:5)
你是对的 - 你可以从一个(或没有)继承,而不是从多个类继承,并通过适应协议继承其余的。如果human
和male
在逻辑上处于同一级别,您可能希望同时制作这两个协议,如下所示:
@interface Bob : NSObject <human,male>
如果您需要共享实施,请在human
和male
上定义类别,并将实施放在那里。这会产生类似于向Bob
添加方法的效果。
答案 1 :(得分:0)
答案 2 :(得分:0)
另一个选择是使NormalMale子类为Male,而子类又是Human。这完全取决于数据的逻辑结构。不要忘记你也有类别,有时在这种情况下有用。