look at the ArrayList parent structure first
look at ArrayList signature
public class ArrayList<E> extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, java.io.Serializable
question: now that AbstractList, is inherited and AbstractList implements List, why does ArrayList bother to restate the implementation of List?
may be a thorn in the corner of the problem, but I am afraid that it is a blind spot of knowledge, you can explore!