Pregunta

Cuando se reemplaza un método no virtual en Java, se recomienda el uso de la anotación @Override, pero ¿qué sucede si implemento un método abstracto? ¿Debo usar @Override también?

¿Fue útil?

Solución

Tiendo a preferir el uso de @Override en este caso, para que el método se marque en las subclases si la superclase cambia (ya sea eliminando el método por completo o cambiando su firma, etc. ).

La única diferencia real es que sin la anotación, si el método en la superclase / interfaz se cambia o se elimina, la implementación en cuestión simplemente se convierte en una " normal " método de esa clase. Por lo tanto, debe agregar la anotación si está implementando el método únicamente para cumplir el contrato; y probablemente no debería agregarlo si el método tiene sentido en su clase, independientemente de las interfaces implementadas o los métodos abstractos heredados.

Otros consejos

Sí, una vez más, le dice al compilador, " Realmente quiero reemplazar un método aquí. Si no hay un método correspondiente para anularlo, ¡he cometido un error y quiero que se lo informe! & Quot;

Personalmente, creo que es una lástima que esto sea solo una anotación en lugar de una parte del lenguaje (como en C #), pero ese es el beneficio de la retrospectiva, por supuesto.

Sí. Es una práctica recomendada por Joshua Bloch en Effective Java.

En realidad, Joshua Bloch, en el párrafo final de la página 178 en Effective Java (2nd Ed.) , dice que no es esencial para los métodos de clases concretas que anulan los métodos abstractos para usar el Anular la anotación porque el compilador daría un error de todos modos. Sin embargo, " no es perjudicial hacerlo " ;.

Recomendaría elegir una estrategia y seguirla de manera constante.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top