2009-06-23 12 views
13

Założenie klasy Vehicle Vehicle ma metodę o nazwie "StartEngine", aw mojej podklasie o nazwie "Airplane" chcę nadpisać "StartEngine". Jeśli używam C#, powinienem użyć słowa kluczowego "override" w deklaracji/definicji metody StartEngine samolotu.Objective-C odpowiednik "override" w C#

Powód, o który pytam, to to, że zamiast "StartEngine" wpisuję "startengine", C# będzie narzekać, ale Objective-C nie będzie, dzięki temu słowu kluczowemu.

Odpowiedz

15

Wszystkie klasy i instancji metod w Objective-C są wysyłane dynamicznie i może być zmieniona w podklasach. Nie ma to jak słowo kluczowe w języku C#: override lub podobnie jak jego słowo kluczowe: virtual.

+0

To ma sens. Właśnie dowiedziałem się, jaka jest metoda w celu-c: wskaźnik do rzeczywistej funkcji nazwa i kodowanie ... Nic więcej. –

+0

Czy jest to również polimorficzne? – Henri

+0

Wszystkie metody w Objective-C są polimorficzne, w tym metody klasy. (W przeciwieństwie do "statycznych" metod w C#, Java i C++, które nie są polimorficzne.) –

11

Tak - zdecydowanie możliwe. Jednak nie ma słowa kluczowego przesłaniania. Po prostu zadeklaruj funkcję z identycznym podpisem w twojej podklasie i zostanie ona wywołana zamiast wersji superklas.

Oto co metoda startEngine samolotu może wyglądać następująco:

- (void)startEngine 
{ 
    // custom code 

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

Właśnie wyjaśniłem pytanie. Wiem, że nadpisanie jest możliwe w celu-c, po prostu chcę, aby kompilator sprawdził, czy faktycznie nadpisuję metodę i nie tworzę nowego w podklasie. –

+0

Ahh - Rozumiem. Niestety, kompilator Objective-C nie zapewnia tego w żaden sposób. Heck - nawet wywołanie funkcji, która nie istnieje, jest tylko ostrzeżeniem! :-) Myślę, że najlepiej byłoby w takim przypadku, aby implementacje metod klasy abstrakcyjnej klasy podstawowej rzuciły NSExceptions. –

2

Wszystkie metody w Objective-C są nadpisywane, wystarczy napisać metodę dla tego samego podpisu.