1
resposta

Duvida conceitual sobre listas

No exemplo criado para ordenação de listas imutaveis, foi criado uma referencia do tipo List a partir de uma nova instancia de um objeto do tipo ArrayList, conforme o codigo abaixo:

    public static void main(String[] args) {
        Curso javaColecoes = new Curso("Dominando Coleções em Java", "Paulo Silveira");
        javaColecoes.adiciona(new Aula("Trabalhando com ArrayList", 21));
        javaColecoes.adiciona(new Aula("Criando uma Aula", 20));
        javaColecoes.adiciona(new Aula("Modelando com colecoes", 24));
        List<Aula> aulasImutaveis = javaColecoes.getAulas();
        System.out.println(aulasImutaveis);
        List<Aula> aulasMutaveis = new ArrayList<>(aulasImutaveis);
        Collections.sort(aulasMutaveis);
        System.out.println(aulasMutaveis);
    }

O codigo compila normalmente. Porém, o que me deixou em dúvida é que aulasImutaveis é uma List criada por uma nova instancia de um objeto do tipo LinkedList, conforme codigo abaixo:

public class Curso {
    private String nome;
    private String instrutor;
    private List<Aula> aulas = new LinkedList<Aula>();

Neste caso, ocorre uma conversão implicita de LinkedList para ArrayList?

1 resposta

Gustavo, bom dia!

Não é bem uma "conversão", fazendo uma analogia simples, digamos que as duas classes LinkedList e ArrayList tem coisas em comum.

As duas contém as mesmas heranças, e quando falamos que LinkedList herda de AbstractSequentialList (que herda de AbstractList), resumindo falamos que LinkedList é uma AbstractList. E também ArrayList é uma AbstractList, por conta de sua herança.

Mesma coisa quando falamos de "object", quando você cria uma classe e tenta instanciar em uma variável do tipo object, você irá conseguir, pois as classes herdam da classe "master" object.