我目前正在学习来自c ++背景的Objective-C。我想知道派生类方法是否有一种方法与基类具有相同的签名,以便不覆盖它。 我读到Objective-C中的每个方法都是虚拟的。是否有任何方法可以使派生类不会覆盖基类方法?
我有以下两个类
@interface foo_base : NSObject
-(void) base_method;
-(void) shared_method;
@end
@interface foo_der : foo_base
-(void) der_method;
-(void) shared_method;
@end
当我像这样使用它时
foo_base *b = [[foo_der alloc]init];
[b shared_method]; //Derived class method will be called.
我知道我可以在派生类方法
中做这样的事情[super shared_method] //call base class method
答案 0 :(得分:0)
不,在Objective-C中,如果派生类实现具有相同签名的基类方法,则始终覆盖它。如果你真的想直接访问基类方法,你可以创建一个这样的“帮助器”函数。
- (void) callSuperSharedMethod {
[super sharedMethod];
}