2009-06-23 20 views
13

Asumir una clase Vehículo tiene un método llamado "StartEngine", y en mi subclase llamada "Avión" quiero anular "StartEngine". Si uso C#, debería usar la palabra clave "anular" en la declaración/definición del método StartEngine de Airplane.Objective-C equivalente a "anular" en C#

La razón por la que estoy preguntando, es que si en lugar de "StartEngine" escribo "startengine", C# se quejará, pero Objective-C no lo hará, gracias a esa palabra clave.

Respuesta

15

Todos los métodos de clase e instancia en Objective-C son enviados de forma dinámica y puede sustituirse en subclases. No hay nada como la palabra clave override de C#, o como su palabra clave virtual.

+0

Eso tiene sentido. Acabo de aprender qué es un método en Object-C: un puntero a la función real, un nombre y una codificación ... Nada extra. –

+0

¿Es entonces también polimórfico? – Henri

+0

Todos los métodos en Objective-C son polimórficos, incluidos los métodos de clase. (Esto es diferente a los métodos "estáticos" en C#, Java y C++, que no son polimórficos.) –

11

Sí, definitivamente es posible. Sin embargo, no hay una palabra clave de anulación. Simplemente declare una función con una firma idéntica en su subclase, y se llamará en lugar de la versión de superclases.

Esto es lo startEngine método de avión podría ser:

- (void)startEngine 
{ 
    // custom code 

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

Acabo de aclarar la pregunta. Sé que la anulación es posible en el objetivo c, solo quiero que el compilador compruebe que en realidad estoy anulando un método, y no creando uno nuevo en la subclase. –

+0

Ahh - Ya veo. Desafortunadamente, el compilador de Objective-C no proporciona ninguna forma de hacerlo. ¡Diablos, incluso llamar a una función que no existe es solo una advertencia! :-) Creo que la mejor opción en ese caso sería hacer que las implementaciones de métodos de la clase base abstracta emitan NSExceptions. –

2

Todos los métodos en Objective-C son anulables, solo tiene que escribir un método para la misma firma.