Por que o ArrayList tem “lista de implementos”?

No Framework de collections, temos a interface List e a class AbstractList :

 AbstractList implements List 

E ArrayList estende AbstractList e

 implements List 

Minha pergunta: por que ArrayList tem a cláusula de implements List ?

Se ArrayList extends AbstractList e AbstractList implements List , não podemos dizer que ArrayList implement List ?

Sim. Poderia ter sido omitido. Mas assim é imediatamente visível que é uma List . Caso contrário, um clique extra através do código / documentação seria necessário. Eu acho que essa é a razão – clareza.

E para adicionar o que Joeri Hendrickx comentou – é com o propósito de mostrar que ArrayList implementa List . AbstractList em toda a imagem é apenas por conveniência e para reduzir a duplicação de código entre implementações List .

O mais provável é que isso aumente a rastreabilidade da estrutura de inheritance. Dessa forma, você não precisa descer toda a tree de inheritance ao navegar pelo Javadoc ou algo parecido.

Meus 2 centavos é para manter o fato de que ArrayList é uma lista. O AbstractList apenas conclui certas implementações que a Lista requer.