JayCesar / generation-bootcamp

[💻 Bootcamp ] Um programa de estudos de 3 meses da Generation Brasil, sendo cada qual destinado a diferentes tecnologias.
4 stars 0 forks source link

Existe polimorfismo aqui? List<Integer> list = new ArrayList<Integer>(); #12

Closed JayCesar closed 1 year ago

JayCesar commented 1 year ago

Sim, existe polimorfismo no código fornecido.

No código em questão, o polimorfismo está presente na declaração da variável list e na atribuição de um objeto ArrayList a ela. O polimorfismo permite que um objeto seja referenciado por meio de um tipo mais genérico, mas ainda assim mantendo sua funcionalidade específica.

Ao declarar a variável list como List, estamos usando o tipo de interface List, que é uma interface genérica que define um conjunto de operações comuns para listas em Java. A interface List é implementada pela classe ArrayList, que é uma implementação específica de uma lista baseada em arrays.

Portanto, mesmo que o objeto seja instanciado como ArrayList, ele pode ser atribuído a uma variável do tipo List. Isso é possível porque a classe ArrayList é uma subclasse de List, e o polimorfismo permite que uma referência de tipo mais genérico seja usada para manipular objetos de tipos mais específicos.

A vantagem de usar o tipo mais genérico List em vez de ArrayList é que ele torna o código mais flexível. Se em algum momento desejarmos trocar a implementação de ArrayList para outra classe que também implemente a interface List, como LinkedList, não precisaríamos alterar o restante do código que utiliza a lista. Isso ocorre porque as operações definidas na interface List são comuns a todas as implementações, permitindo que o código seja independente da implementação específica da lista.

Para utilizar métodos específicos da classe ArrayList, é necessário fazer uma conversão de tipo (casting) para ArrayList. Por exemplo, se quisermos chamar o método ensureCapacity() da classe ArrayList, precisamos fazer o casting da seguinte maneira: ((ArrayList) list).ensureCapacity(19) [1].

Referências: [1] Stack Overflow. "Polymorphism: Why use List list = new ArrayList() instead of ArrayList list = new ArrayList()?" https://stackoverflow.com/questions/9852831/polymorphism-why-use-list-list-new-arraylist-instead-of-arraylist-list-n [2] Stack Overflow. "ArrayList and polymorphism." https://stackoverflow.com/questions/25884724/arraylist-and-polymorphism [3] Stack Overflow. "Reason for List list = new ArrayList()." https://stackoverflow.com/questions/18329311/reason-for-list-list-new-arraylist [4] The University of Texas at Austin. "Polymorphism and ArrayLists." https://www.cs.utexas.edu/~nclement/aces/javaII/10-polymorphism-arraylists.html