Objective-C相当于C#中的"覆盖"

And*_*scu 13 objective-c

假设一个类Vehicle有一个名为"StartEngine"的方法,在我的子类中称为"Airplane",我想覆盖"StartEngine".如果我使用C#,我应该使用Airplane的StartEngine方法声明/定义中的"override"关键字.

我问的原因是,如果不是"StartEngine"我键入"startengine",C#会抱怨,但是由于该关键字,Objective-C不会.

Chr*_*son 15

Objective-C中的所有类和实例方法都是动态调度的,可以在子类中重写.没有像C#的override关键字,或者像它的virtual关键字一样.


Ben*_*tow 11

是的 - 这绝对是可能的.但是没有覆盖关键字.只需在子类中声明一个具有相同签名的函数,它将被调用而不是超类版本.

以下是Airplane的startEngine方法可能如下所示:

- (void)startEngine
{
    // custom code

    // call through to parent class implementation, if you want
    [super startEngine];
}
Run Code Online (Sandbox Code Playgroud)

  • 我刚刚澄清了这个问题.我知道在objective-c中可以覆盖是可能的,我只是希望编译器检查我实际上是否覆盖了一个方法,而不是在子类中创建一个新方法. (2认同)