2010-12-03 26 views
66
public class NaiveAlien extends Alien 
{ 

    @Override 
    public void harvest(){} 

} 

Estaba tratando de entender el código de mi amigo, y no obtengo la sintaxis, @Override en el código. ¿Qué hace eso y por qué necesitamos la codificación? Gracias.¿Qué significa @Override?

Respuesta

122

Es una sugerencia para el compilador para hacerle saber que está anulando el método de una clase principal (o interfaz en Java 6).

Si el compilador detecta que NO hay una función que anular, le avisará (o error).

Esto es extremadamente útil para identificar rápidamente errores tipográficos o cambios de API. Supongamos que intentas anular el método harvest() de tu clase principal, pero deletéralo harvset(), tu programa llamará silenciosamente a la clase base, y sin @Override, no tendrás ninguna advertencia al respecto.

Del mismo modo, si está utilizando una biblioteca, y en la versión 2 de la biblioteca, harvest() se ha modificado para tomar un parámetro entero, ya no lo anulará. De nuevo, @Override se lo diría rápidamente.

+14

Tenga en cuenta que @Override solo funciona para funciones públicas y protegidas. – MrMas

+0

También se debe mencionar que ** múltiples ** anotaciones también son posibles y que también se puede agregar otro código con esto. Por ejemplo, al verificar permisos en aplicaciones Android M, como se hace en [PermissionsDispatcher] (https://github.com/hotchemi/PermissionsDispatcher). – not2qubit

9

@Override significa que está anulando el método de la clase base. En java6, también significa que está implementando un método desde una interfaz. Te protege de los errores tipográficos cuando crees que se está anulando un método pero se ha escrito mal.

23

Esta función se denomina anotación. @Override es la sintaxis de usar una anotación para que el compilador sepa, "hey compiler, estoy cambiando lo que cosecha hace en la clase padre", entonces el compilador puede decir inmediatamente, "amigo, lo está nombrando incorrectamente". El compilador no compilará hasta que lo nombre correctamente.

Por lo tanto, sin esta anotación @Override, el compilador no tendrá errores y se considerará una nueva declaración de método. Sería difícil reconocer el error en este punto.

+29

Deseo que las advertencias y errores del compilador me llamen "amigo". – CSJ

+1

La capitalización importa, estamos hablando de '@ Override', amigo :) – datafiddler