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();
?
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.
1 curtida
Esse é um conceito chamado de polimorfismo como o abel explicou muito bem, leia esse artigo para entender melhor do que se trata
1 curtida