Al reemplazar un método no virtual en Java, se recomienda el uso de la anotación @Override, pero ¿qué ocurre si implemento un método abstracto? ¿Debería usar @Override también?Java: ¿Debo agregar una anotación @Override al implementar métodos abstractos?
Respuesta
Tiendo a preferir el uso de @Override
en este caso, de modo que el método se marque en las subclases si la superclase cambia (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 elimina, la implementación en cuestión simplemente se convierte en un método "normal" 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.
Sí. Es una práctica recomendada por Joshua Bloch en Java efectivo.
Sí. - una vez más, le dice al compilador, "Realmente quiero ser sustituir un método que aquí Si hay no es un procedimiento correspondiente para anular, he cometido un error y quieren que les digan al respecto ! "
Personalmente, creo que es una pena que esto sea solo una anotación en lugar de parte del lenguaje (como en C#), pero ese es el beneficio de la retrospectiva, por supuesto.
+1 para la "prueba de regresión" – guerda
Eso me salvó la piel unas cuantas veces. –
En realidad, Joshua Bloch, en el último párrafo de la página 178 en Effective Java (2ª Ed.), dice que no es esencial para los métodos de clases concretas que tienen preferencia sobre los métodos abstractos de utilizar la anotación Override
porque el compilador dar un error de todos modos. Sin embargo, "no es dañino hacerlo".
Recomiendo elegir una estrategia y seguir con ella constantemente.
El compilador daría un error de todos modos? ¿Quiere decir que si una clase concreta implementa un método que no es un método abstracto de una superclase, el compilador se quejaría de ello? Eso no puede ser lo que quieres decir, pero no puedo entender lo que quieres decir. – LarsH
@LarsH Quiere decir que el compilador dará un error si la clase concreta no implementa un método abstracto en la superclase, que sería el caso si escribes mal el nombre del método abstracto que la subclase necesita implementar. –
@espertus: Gracias por la aclaración. De modo que no obtendría un error o advertencia si, como dijo Andrzej, el método en la superclase/interfaz se cambia o elimina. – LarsH
- 1. Java: ¿cómo implementar métodos abstractos privados?
- 2. anotación @ Override
- 3. métodos abstractos en una interfaz Java
- 4. Uso de la palabra clave override en implementaciones de métodos abstractos
- 5. Clases y métodos abstractos en Java, Herencia
- 6. Java Eclipse @ Override error
- 7. Cómo implementar automáticamente métodos abstractos heredados en Delphi XE
- 8. Métodos abstractos en Python
- 9. Por qué está fallando Java en la anotación @Override
- 10. anotación @override en JDK 1.6
- 11. Comentarios sobre los métodos @ Override
- 12. métodos abstractos estáticos en C++
- 13. ¿Cómo encontrar todos los métodos anulando los métodos de superclase/interfaz sin la anotación @Override?
- 14. ¿Los métodos abstractos son virtuales?
- 15. Visibilidad estándar para métodos abstractos
- 16. ¿Implementando métodos abstractos en tiempo de ejecución?
- 17. Clase abstracta sin métodos abstractos
- 18. error de anotación @ Override (Preferencias androide)
- 19. atributos abstractos en Java
- 20. Comparación: métodos de interfaz vs métodos virtuales vs métodos abstractos
- 21. Cómo agregar una anotación a MKMapView utilizando una anotación MKPoint?
- 22. Anulación de los rasgos y los métodos abstractos en Scala
- 23. C# métodos estáticos virtuales (o abstractos)
- 24. Java, Anotaciones de Hibernate, ¿Cómo agregar métodos al objeto POJO?
- 25. ¿Puedo/debo implementar métodos de Python por asignación a atributos?
- 26. ¿Es posible implementar X-HTTP-Method-Override en ASP.NET MVC?
- 27. métodos abstractos internos. ¿Por qué alguien los tendría?
- 28. ¿Por qué Eclipse se queja de @Override en los métodos de interfaz?
- 29. Agregar una anotación clicable a un UIMapView
- 30. ¿Cuál es el propósito de la anotación @Override?
También necesita Java 6 para aprovechar esta anotación. Java 5 no le permite ubicarlo en implementaciones de interfaz. – akarnokd