2009-06-23 44 views
13

假設一個Vehicle類有一個名爲「StartEngine」的方法,而在我的子類「Airplane」中我想覆蓋「StartEngine」。如果我使用C#,我應該在飛機的StartEngine方法聲明/定義中使用「override」關鍵字。Objective-C等價於C#中的「override」#

我問的原因是,如果不是「StartEngine」,而是鍵入「startengine」,C#會發出抱怨,但Objective-C不會,這要歸功於該關鍵字。

回答

15

在Objective-C的所有類和實例方法是動態調度,並且可以在子類覆蓋。沒有什麼像C#的override關鍵字,或像它的virtual關鍵字。

11

是的 - 這絕對有可能。雖然沒有覆蓋關鍵字。只需在你的子類中聲明一個具有相同簽名的函數,它將被調用而不是超類的版本。

這裏是飛機的startEngine方法可能是什麼樣子:

- (void)startEngine 
{ 
    // custom code 

    // call through to parent class implementation, if you want 
    [super startEngine]; 
} 
+2

我剛纔澄清了這個問題。我知道重寫是可能的objective-c,我只是希望編譯器檢查我實際上覆蓋了一個方法,而不是在子類中創建一個新的。 – 2009-06-23 19:19:29

+0

啊 - 我明白了。不幸的是,Objective-C編譯器沒有提供任何方式來做到這一點。赫克 - 甚至調用一個不存在的函數只是一個警告! :-)我認爲在這種情況下最好的選擇是讓抽象基類的方法實現拋出NSExceptions。 – 2009-06-24 22:30:58

2

Objective-C中的所有方法都是可覆蓋的,您只需爲相同的簽名編寫一個方法即可。