2010-12-08 11 views
34

En el marco de recopilación que tienen la interfaz List y la clase AbstractList:¿Por qué ArrayList tiene "implementa la Lista"?

AbstractList implements List 

Y ArrayList extiende AbstractList y

implements List 

Mi pregunta: ¿por qué ArrayList tienen la cláusula implements List?

Si ArrayList extends AbstractList y AbstractList implements List, ¿no podemos decir que ArrayList implement List?

Respuesta

39

Sí. Pudo haber sido omitido. Pero así es inmediatamente visible que es un List. De lo contrario, se requeriría un clic adicional a través del código/la documentación. Creo que esa es la razón, claridad.

Y para agregar lo que Joeri Hendrickx comentó, es con el propósito de mostrar que ArrayList implementa . AbstractList en la imagen completa es solo por conveniencia y para reducir la duplicación de código entre las implementaciones List.

+21

No solo eso, sino que prefiero este estilo porque es revelador de intenciones. El objetivo de la lista de arrays es implementar List. La lista abstracta ampliada es solo una forma de lograr ese objetivo. –

+0

@Joeri Hendrickx estuvo de acuerdo. +1 para el comentario – Bozho

+0

Si la clase base implementa una interfaz, la herramienta JavaDoc actual (tanto la versión de Oracle como la de Gnu) mostrará que la clase derivada implementa la interfaz automáticamente, sin poner 'implementa TheInterface' en la clase derivada. Por lo tanto, no se requieren clics adicionales. (Esto es cierto incluso si la clase base no es pública). –

6

Lo más probable es que esto aumente la trazabilidad de la estructura de herencia. De esta forma, no tiene que recorrer todo el árbol de herencia cuando navega por el Javadoc o similar.

5

Mis 2 centavos es para mantener el hecho de que ArrayList es una lista de. AbstractList solo completa ciertas implementaciones que requiere la Lista.

Cuestiones relacionadas