Existen algunas relaciones de herencia en las interfaces de colección de Java. Por ejemplo, la interfaz Collection<T>
se extenderá a Iterable<T>
. Comprobé el código fuente en JDK, algunos métodos definidos en la clase base se repiten varias veces en las clases secundarias. Por ejemplo: Interable<T>
interfaz definió un método Iterator<E> iterator();
Pero en la interfaz Collection<E>
y List<T>
, también contienen el mismo método. Según entiendo, dado que la herencia se usa para reducir la duplicación, ¿por qué deberíamos definir el mismo método en las subclases?Herencia en las interfaces de colección Java
Respuesta
La interfaz Iterable
se introdujo más tarde since 1.5
. Por lo tanto, antes de esta versión solo las subclases java.util.Collection
se usaban para implementar iterator()
.
Más tarde iterator()
se hizo estándar al introducir la interfaz Iterable
de manera que cualquier clase que pueda iterar pueda implementar esta interfaz.
Después de introducir Iterable
interfaz, también se hizo la interfaz Collection
extender Iterable
interfaz de tal manera que Collection
interfaz también implementa el estándar.
Para Ex,
java.sql.SQLException
también implementa Iterable
Véase en java.util.List
"La interfaz Lista coloca estipulaciones adicionales, más allá de los especificados en la interfaz de la recogida en el contratos de los métodos iterator, add, remove, equals y hashCode. Las declaraciones para otros métodos heredados también se incluyen e por conveniencia ".
+1 De hecho, supongo que las razones para volver a definir esos métodos son (como la cita que publicó estados): 1. poder agregar diferentes comentarios JavaDoc (es decir, los contratos que se mencionan) y 2. como una conveniencia para proporcionar una descripción general rápida de los métodos disponibles. – Thomas
Collection
salió en versión 1.2, pero Iterable
salió después en la versión 1.5 para permitir concisa para-bucles, por lo que creo que era un caso de mantener la interfaz Collection
y los Javadocs la misma entre versiones. Pero está en lo correcto, no hay ninguna razón por la que no pueda eliminar el método iterator()
de Collection
, todo se compilaría.
La interfaz Collection
extiendeIterable
. Una superclase abstracta implementa los métodos comunes a varias clases; en el caso de las listas, es AbstractList
, con cada clase concreta (por ejemplo, ArrayList
o LinkedList
) que proporciona los detalles de implementación específicos.
De hecho, como habrás adivinado, la herencia se usa para reducir la duplicación de código. Pero precisamente por eso, todas las subclases contendrán las mismas operaciones definidas en las superclases, los detalles de implementación comunes a varias clases aparecerán solo una vez en la jerarquía de clases en el nivel de clase abstracta, y no se "definen" nuevamente en el subclases: solo las partes que cambian se redefinen en subclases concretas.
- 1. ¿Las interfaces son redundantes con herencia múltiple?
- 2. ¿Cómo simulan las interfaces Java la herencia múltiple?
- 3. herencia de interfaces en C++
- 4. ¿Por qué Java prohíbe la herencia de interfaces internas?
- 5. ¿Es posible usar herencia en las interfaces AIDL?
- 6. C++ ¿Herencia múltiple con interfaces?
- 7. consulta acerca de las interfaces en Java
- 8. herencia de interfaces similares en C++
- 9. C# Pasando una colección como una colección de interfaces
- 10. ¿Equivalente a las interfaces Java en C++?
- 11. ¿De dónde sacó Java la idea de las interfaces?
- 12. Herencia múltiple en java
- 13. ¿Inventó Java interfaces?
- 14. Interfaces fluidas y herencia en C++
- 15. Interfaces fluidas y herencia en C#
- 16. Anotaciones en las interfaces?
- 17. C# exponer a COM - herencia de interfaces
- 18. Interfaces de etiquetado en Java
- 19. ambigüedad en la herencia múltiple de interfaces en C++
- 20. ¿Por qué necesitamos interfaces en Java?
- 21. Java/Hibernate usando interfaces sobre las entidades
- 22. Importancia de las interfaces C#
- 23. Uso de los genéricos de Java en las interfaces de
- 24. Interfaces y herencia de clase abstracta, implementación en clases ampliadas
- 25. Comprensión de las interfaces
- 26. Ampliación (no implementación) de las interfaces Java en Clojure
- 27. Implementa las interfaces de Mapa y Lista en Java?
- 28. Herencia en Core Java
- 29. Autorreferencia en las interfaces
- 30. Java ORM: Herencia múltiple (interfaz)
Como se refiere a las interfaces, no hay que anularlas. – Thomas