2010-11-15 10 views
8

Duplicar posible:
What's “@Override” there for in java?Java - lo que es "@ Override" se utiliza?

nunca he puesto "@ Override" antes de un método hasta ahora. Veo algunos ejemplos de código con él, pero no entiendo su utilidad. Me encantaría una explicación.

Muchas gracias,

JDelage

+0

Duplicado de [¿Qué es "@Override" allí en java?] (Http://stackoverflow.com/questions/2489974/whats-override-there-for-in-java) –

+0

Solo para aclarar, dices " @Override before a class "- ¿te refieres a un método? ¿O realmente te estás refiriendo a una anotación @Override en una clase? –

+0

También duplicado de http://stackoverflow.com/questions/94361/when-do-you-use-javas-override-annotation-and-why –

Respuesta

6

En primer lugar, no se puede anotar una clasecon @Override. Esta anotación indica que una declaración de método está destinado a sustituir una declaración de método en una superclase.

Usted no tiene que anotar anulando métodos pero si se utiliza este método de anotación y su comentada no lo hace anulación de un método de una clase, el compilador generará un mensaje de error.

1

Es un comentario convencional. Algunos compiladores se aseguran de que la función seguida por @Override sea en realidad una anulación ... solo un failsafe

8

Indica que una declaración de método está destinada a anular una declaración de método en una superclase. Si un método está anotado con este tipo de anotación, pero no anula un método de una clase, se requiere que los compiladores para generar un mensaje de error.

http://download.oracle.com/javase/6/docs/api/java/lang/Override.html

El caso me gustaría explicar su uso es cuando anulando equals.

este error porque equals espera un parámetro Object:

public class Foo{ 

    @Override 
    public boolean equals(Foo f){ 
     return true; 
    } 
} 
+0

... Aunque creo que se puede omitir en métodos que realmente son reemplazos. Creo que producirá una advertencia en * algunos * entornos, pero no un error. – FrustratedWithFormsDesigner

+1

Error si coloca '@ Override' en un método que no anula nada. Definitivamente no es obligatorio, pero ayuda al compilador a ayudarte. – Jeremy

2

Está ahí para expresar que espera que el método a ser de primer orden de un método de la superclase. No obstante, presenta muy útil cuando se comete un error de ortografía el nombre del método o proporcionándole los parámetros erróneos para que no anula lo que se pensaba que era imperativa.

5

El mejor ejemplo - anulando equals().

Si se escribe una clase como esta:

public class Foo 
{ 
    public String bar; 

    public boolean equals(Foo other) 
    { 
     return this.bar.equals(other.bar); 
    } 
} 

entonces has sobrecargado el método equals en vez de invalidar Object.equals como se pretendía.

Si anotar el método equals con @Override, el compilador le dará un error que indica (correctamente) que no ha anulado un método de una clase.

En Java 6, puede usar esto también para implementar métodos de interfaz; esto es útil cuando solo está agregando un método a su clase para satisfacer alguna interfaz, y por lo tanto el compilador puede verificar que sea necesario y alertarlo la interfaz cambiando

Al igual que con todas las anotaciones, es efectivamente un comentario programático, pero hacer que el compilador compruebe que sus suposiciones son (aún) correctas es muy útil en estos casos.

Cuestiones relacionadas