Qual a diferença entre tipo e instância de um objeto?

2 respostas Resolvido
Andryel_Prestes

Estou começando a aprender java e já faz um tempinho que aprendi a instanciar objetos no entanto sempre fiz assim: (mesmo tipo e mesma classe)

ClasseFilha obj1 = new ClasseFilha();
Então hoje me deparei com o instanceof e pesquisando a respeito consegui entender mais ou menos sobre como ele funciona, mas me surgiu outra dúvida. Primeiramente eu não sabia que era possível o objeto ser de um tipo e a instancia de outro, então após ter lido a explicação do instanceof comecei a me perguntar: que diferença faz o objeto ser de um tipo ou de outro?

Qual a diferença entre isso:

ClasseFilha obj1 = new ClasseFilha();

E isso:

ClasseMae obj2 = new ClasseFilha();

?

2 Respostas

A
Solucao aceita

Uma diferença prática é que ao declarar objetos com a classe mãe, você não tem acesso direto aos métodos que são definidos apenas na classe filha.
Por exemplo, com List, ArrayList e LinkedList:

ArrayList<String> declaradaComoArrayList = new ArrayList<>();
    declaradaComoArrayList.ensureCapacity(10);

    List<String> declaradaComoList = new ArrayList<>();
//    declaradaComoList.ensureCapacity(10); // Não compila!

    LinkedList<String> declaradaComoLinkedList = new LinkedList<>();
    declaradaComoLinkedList.addFirst("primeiro");
    declaradaComoLinkedList.addLast("último");


    List<String> declaradaComoList2 = new LinkedList<>();
//    declaradaComoList2.addFirst("primeiro"); // Não compila

E qual a utilidade disso?

Na prática você verá que métodos costumam retornar List ao invés de ArrayList ou LinkedList.
Isso por conta de um principio que se costuma seguir de programar para a interface e não para implementação.
A interface nesse caso é List* e as implementações são ArrayList e LinkedList.
Geralmente quando você usa um List, você só se importa que é um grupo de objetos ordernado. Se é um ArrayList ou LinkedList não faz muita diferença pro resto do código.
Dizendo que o método retorna List, você pode trocar a implementação, sem precisar mudar o resto do programa.

  • Nesse exemplo, List é uma interface do java, mas o mesmo conceito se aplica a classe mãe e filha.
M

Esse é um conceito chamado de polimorfismo como o abel explicou muito bem, leia esse artigo para entender melhor do que se trata

Criado 15 de fevereiro de 2021
Ultima resposta 15 de fev. de 2021
Respostas 2
Participantes 3