子类必须实现父母遵守的协议吗?

时间:2011-05-09 15:58:26

标签: objective-c protocols subclassing

我有一个类MyClass,它实现了NSCopying协议,我有一个类MyClassChild,它继承自MyClassMyClassChild未实施NSCopying协议。我正在阅读的教科书说它必须,但我可以成功建立!教科书错了吗?

@interface MyClass : NSObject <NSCopying> {

}

@end

@implementation MyClass

-(id)copyWithZone:(NSZone *)zone
{
    return self;
}

@end

@interface MyClassChild : MyClass {

}

@end

@implementation MyClassChild

@end

3 个答案:

答案 0 :(得分:2)

如果不在copyWithZone:中为MyClassChild方法提供实现,则该类从其超类(MyClass)继承方法实现。这意味着MyClassChild 符合NSCopying协议。如果MyClassChild在复制实例时需要执行一些特殊操作,则应覆盖copyWithZone:并执行需要执行的操作。希望有所帮助。

P.S。我希望您意识到返回self不是实施copyWithZone:的好方法吗?

答案 1 :(得分:1)

MyClassChildNSCopying继承了MyClass的实施。即使你已经指定了

@interface MyClassChild : MyClass <NSCopying>

编译器足够聪明,可以检查是否有任何超类实现-copyWithZone:

答案 2 :(得分:0)

NSCopying要求对象实现copyWithZone,你是绝对正确的。但是,MyClass实现了copyWithZone。所以MyClassChild已经通过派生MyClass来实现它。