2011-01-27 7 views
15

Duplicar posibles:
When do you use Java's @Override annotation and why?¿Realmente necesitamos @Override y demás cuando codificamos Java?

Me pregunto lo que la funcionalidad de añadir @Override delante del código nos gustaría anular es. He terminado con y sin él, y parecía que todo iba bien (al menos para mí).

+8

Obtiene una comprobación de tiempo de compilación mucho más agradable, por ejemplo. Duplicado: http://stackoverflow.com/questions/94361/when-do-you-use-javas-override-annotation-and-why – birryree

+1

Estaba tan revivido cuando cambié de Delphi a Java. No necesitaba 'virtual'. por más tiempo ... @Override es un paso atrás. Hoy en día, la mayoría de los IDE han sobrescrito automáticamente, por lo que rara vez se escribe a mano, contribuye al estilo java suave, aunque :) – bestsss

+0

@bestsss - nadie te obliga a utilizar @Override. Pero no te atrevas a despojarlo de ningún código que >> I << escriba. –

Respuesta

27

No es necesario , pero es muy recomendable. Evita que te dispares en el pie. Ayuda a prevenir el caso cuando escribes una función que crees que anula a otra, pero escribes mal y obtienes un comportamiento completamente inesperado.

2

Se recomienda ya que ayuda a administrar la consistencia. Imagina que alguien cambiará el nombre del método de superclase (y solo allí, sin realizar cambios de nombre en las clases que dependen de él, lo que es bastante hipotético :)), entonces serás el primero en saberlo debido a errores de compilación.

1

Me ha ayudado un buen par de veces para evitar errores de ortografía/diferencias de casos en los nombres de los métodos. Sin él, es uno de estos bichos molestos que pueden tardar años en rastrear.

No agrega ninguna diferencia funcional, pero decirle al compilador que usted cree que está anulando un método para que pueda quejarse si no es muy útil cuando lo arruina en alguna parte.

1

Se recomienda encarecidamente su uso, ya que aumenta la capacidad de reproducción insuficiente de nuestro código y ayuda a otros a mantener también su código.

-4

¡NO!

Si le resulta útil, necesita un IDE real, o aprender a usarlo.

+3

-1: ¿Nunca te mordieron cambiando accidentalmente la firma por lo que el método ya no se reemplaza? –

+0

NUNCA desde que usé IntelliJ. – irreputable

+3

Ummm ... el diseño de un lenguaje de programación no debe basarse en el uso de un IDE específico. –

16

lo que la funcionalidad de añadir @ Override

Le permite al compilador doble comprobación para usted cuando afirma (anotando) que se supone que un método especificado para anular un método de una clase (o implementar una método de interfaz en Java 6 o posterior). Si el método no reemplaza, de hecho, un método de superclase (o implementa un método de interfaz), el compilador lo marcará como un error. Esto a menudo indica que tiene un error tipográfico en el nombre del método o que cometió un error en la firma del método.

lo que realmente necesita @Override

¿Lo necesita? Por supuesto que no, pero su ejemplo un barato manera de

  • transmite explícitamente al lector humano que se trata de un método de primer orden, y
  • capturas un insecto en tiempo de compilación que podrían tener, al menos, algunos ciclos cerebrales para ponerse al día en tiempo de ejecución una vez que incluso sabe que buscarlo

... e incluso más barato que el IDE es h lo incluyo ...

-2

Personalmente, no creo que sea útil, excepto para los IDE que hacen la comprobación de errores en tiempo de compilación, pero esa es mi opinión. Motivo: suponga que tiene

Class A { 
    methodName() { System.out.println ("A"); } 
} 

class B extends A { 
    methodName() { System.out.println ("B"); } 
} 

En tiempo de ejecución, es probable que llame B.methodName() - que no importa a B si B.methodName() anula el mismo nombre de la clase A(). Para la clase B, ni siquiera debería importar si la superclase (A) implementa methodName(). Lo que quiero decir es que la herencia es una calle de sentido único: no se puede deshacer algo usando una @override, todo lo que el compilador puede verificar es si hay un método con la misma firma en la superclase, que no se usará de todos modos. .

Para las otras respuestas, si alguien edita A.java para eliminar o renombrar methodName() o cambiar su firma, puede llamar a B.methodName() sin ningún problema, pero solo si no usa esa @override . Creo que esto también es por qué es no una parte del lenguaje Java.

+2

@Override ** es ** parte del lenguaje Java - ver http://java.sun.com/docs/books/jls/third_edition/html/interfaces.html#9.6.1.4 –

+0

Puede ser No lo dije bien, no estoy tomando anotaciones en general, solo la utilidad de @override. –

+2

Si quiere decir que no cree que sea útil ... simplemente diga eso. Lo que * realmente * dijo es claramente incorrecto. –