
public interface List<E>
extends Collection<E>
public class ArrayList<E>
extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, Serializable
List는 Collection을 상속(extends) 받은 interface이고, ArrayList는 List를 상속(implements) 받은 Class이다.
따라서,
List<String> list = new ArrayList<>();
이렇게 쓰는것은 업캐스팅(upcasting)을 하는 것이다.
업캐스팅을 해서 코드를 작성하게 된다면, 이 코드를 작성한 뒤에
ArrayList를LinkedList로 수정하는 등의 이슈에도 코드의 의존도가 낮아서 수정해야 할 부분이 적다.