2011-01-10 11 views
7

Ésta es una pregunta muy naiveish, pero aquí va:Propósito de anulación

Un método sobreescrito de una clase base significará que llama a la clase sub llamará al método sobreescrito derivada, correcto?

Por lo tanto, si no hay ninguna anulación de anulación, se llamará al método de la clase base. Por lo tanto, el método de anulación servirá exclusivamente para documentar el intento: llamar a una versión de un método sobre la otra.

¿Es este el caso?

Esto me lleva a la siguiente pregunta:

¿Cuál es la diferencia entre una clase abstracta que 5-6 clases pueden derivar de los métodos heredados, pero en las clases derivadas no son anulado, y una clase (o estático no siendo irrelevante), utilizado por esas 5-6 clases?

+0

'override' es solo una anotación. Funciona de la misma manera si la anotación está allí o no. – Gabe

+0

Esto se responde ampliamente en http://stackoverflow.com/q/94361/697630 –

Respuesta

10

La anotación @ Override es SOLO para detectar errores en tiempo de compilación. No afecta el comportamiento de anulación en el tiempo de ejecución. La idea es que le dé al compilador la oportunidad de informarle que su nombre de método o firma es incorrecta.

+6

Es particularmente útil cuando se consideran cambios de código a lo largo del tiempo. Si su subclase anula un método de la clase base, pero luego alguien cambia esa firma de método en la clase base, su subclase ya no anula nada, lo que probablemente sea incorrecto. El @Override le dice al compilador que se espera que el método anule algo, por lo que se disparará durante el tiempo de compilación, lo que le permitirá investigar y corregir la situación. Piénselo como una afirmación de tiempo de construcción. –

+0

Buen ejemplo, realmente tiene sentido, ¡gracias! – dotnetdev

0

El uso de abstract es un diseño arquitectónico para garantizar que los usuarios deben implementar un método abstracto (declarado pero no implementado en la clase base) o que todos tienen acceso a los mismos métodos y datos básicos (esto es lo mismo que último ejemplo que diste).

0

Por lo tanto, si no hay anotación override , el método en la clase base será llamado.

No. Siempre se llamará al método de anulación en la clase derivada.

lo tanto, el método de reemplazo servirá únicamente para documentar la intención - llamar a una versión de un método sobre el otro.

¿Es este el caso?

No. Según las otras respuestas, le dice al compilador que insista en que hay algo que anular.