Esse tipo List
é uma interface que representa os métodos principais para as classes lidarem com uma sequência (um conjunto ordenado) de elementos. Então, como um ArrayList
é uma classe que lida com um conjunto ordenado de elementos, essa classe acaba implementando a interface List
.
Existem várias outras classes que implementam List
, por exemplo: LinkedList
, AbstractList
...
Como na nossa aplicação usamos as funcionalidades principais de uma lista (adicionar, remover, buscar pela posição...), não usamos nada específico de uma ArrayList
. Então, podemos nos referir ao nosso ArrayList
como List
, usando polimorfismo.
Mas se não usamos nada específico da ArrayList
, por que usamos esse objeto então?
Se fizéssemos new List<Aluno>
teríamos que implementar todos os métodos de uma List
, pois ela é somente uma interface. Para evitar isso, usamos uma classe que já tem os métodos implementados, no caso a ArrayList
.