2009-02-18 17 views

Respuesta

47

Como usted describe, @Override crea una verificación en tiempo de compilación de que un método está siendo anulado. Esto es muy útil para asegurarse de que no tenga un problema de firma tonto al intentar anular.

Por ejemplo, he visto el error siguiente:

public class Foo { 
    private String id; 
    public boolean equals(Foo f) { return id.equals(f.id);} 
} 

Esta clase compila como está escrito, pero añadiendo la etiqueta @ Override al método equals provocará un error de compilación, ya que no prevalece sobre el método equals en Object. Este es un error simple, pero puede escapar incluso a un desarrollador experimentado

+0

@AngryDuck es porque utilizas 3 signos de interrogación. – Det

21

No solo hace que el compilador revise, aunque eso sería suficiente para hacerlo útil; también documenta la intención del desarrollador.

Por ejemplo, si anula un método pero no lo usa en ninguna parte del tipo en sí, alguien que llegue al código más tarde puede preguntarse por qué está allí. La anotación explica su propósito.

+2

Me pregunto cuáles fueron sus puntos de reputación cuando respondió esta pregunta. –

+0

@OmarTariq: Supongo que aproximadamente 50K sospecho. –

+0

@OmarTariq Yo también :) Voté tu comentario ... –

2

nop - excepto que también mejora la lectura (es decir, además de cualquier indicador utiliza el IDE, que hace que sea fácil de detectar que un método, se sustituye una declaración en la superclase)

10

No, casi lo tienes clavado.

@Override le dice al compilador que su intención : si etiquetas un método @Override, que la intención de reemplazar algo de la superclase (o interfaz, en Java 6). Un buen IDE marcará amablemente cualquier método que anule un método sin @Override, por lo que la combinación de los dos ayudará a garantizar que está haciendo lo que está intentando.