Java / Spring - Herança, Polimorfismo e injeção de dependência - Parte 2

Índice
Esta é a segunda parte de uma série de tutoriais focados na revisão dos tópicos básicos da linguagem Java para preparar o leitor no uso do Spring Framework. A primeira parte desta série de tutoriais pode ser encontrada aqui. Neste tutorial estaremos falando sobre polimorfismo.
A palavra polimorfismo vem do grego "poli", que significa muitos, e "morfo", que significa forma e, em geral, é a isso que se refere, a capacidade de assumir várias formas. Em Programação Orientada a Objetos, falamos sobre variáveis ​​ou referências que podem assumir a forma de vários objetos diferentes.
Agora que você sabe de onde vem o conceito, vamos tentar relacioná-lo com a linguagem Java. Como vimos no tutorial anterior, o conceito de "Herança" nos permite estabelecer uma relação pai-filho entre 2 classes privadas:
Imagem enviada
Neste exemplo, a relação de herança é entre a classe Cachorro e a classe Animal, a aula Gato e a classe Animal e a classe Cavalo e a classe Animal, observe que entre Cachorro, Gato Y Cavalo não há relacionamento direto.
Usando este diagrama como base, podemos dizer que um Cachorro É um Animal, um Gato É um Animal e um Cavalo É um Animal. Quando você pode expressar o relacionamento dessa forma em Java, podemos dizer que uma variável da classe Animal é polimórfico, pois pode assumir a forma de um Cavalo, de um Gato ou um Cachorro.
No tutorial anterior, também vimos que TODAS as classes herdam direta ou indiretamente da classe Objeto, neste caso, o diagrama é um pouco mais completo se o definirmos assim:
Imagem enviada
E isso pode ser estendido para vários níveis abaixo (essencialmente o limite de nível dependerá de sua JVM, mas normalmente está acima de 40). Portanto, um Animal É um Objeto, um Gato É um Animal e um Gato (por transitividade) É um Objeto.
Java então permite que você use referências de classe em pontos altos nesta estrutura para apontar para objetos abaixo deles na estrutura. Por exemplo:
 public static void main (String [] args) {Object o1 = new Object (); Animal a1 = novo Animal (); Cachorro p = novo Cachorro (); o1 = a1; o1 = p; a1 = p; Objeto o2 = novo Animal (); Objeto o3 = novo Cachorro (); Animal a2 = novo cão (); booleano b1 = o1 == o2; booleano b2 = o1 == o3; booleano b3 = o1 == a2; if (b1 || b2 || b3) {DoNothing (); }} 

Como você pode ver, uma variável de Objeto pode se referir a um objeto Animal ou a um objeto Cachorro, assim como uma variável Animal pode se referir a um objeto Cachorro. A capacidade de polimorfismo derivada disso nos leva a sermos capazes de manipular um objeto sem ter que saber exatamente qual objeto É, vejamos o seguinte método de exemplo:
public static void doSomething (Animal a) {a.getColorDePelo (); }

Quando uma aplicação utiliza este método não sabe qual Animal está recebendo por parâmetro, pode ser um Cachorro, pode ser um Gato, pode ser um Cavalo ou posteriormente uma Toupeira, um Elefante, um Mandril ou qualquer outra classe que é do tipo Animal.
A chave para essa propriedade é que ela permite que o programa use métodos de certas subclasses sem saber especificamente que tipo de Animal ele é e, portanto, mantenha um nível significativo de abstração com respeito a futuras implementações da classe Animal.
No próximo tutorial nos aprofundaremos no tópico do polimorfismo, veremos o que são interfaces e como programar com foco em interfaces, o que ajudará a entender os tutoriais a seguir.
O assunto ficou um pouco mais longo do que eu esperava, mas não se desespere! É importante entender esses conceitos corretamente antes de iniciar a injeção de dependência para entender como o Spring funciona.
Espero que continuemos com esses tutoriais semana a semana, não esqueça de deixar seus comentários até a próxima!Gostou e ajudou este tutorial?Você pode recompensar o autor pressionando este botão para dar a ele um ponto positivo

Você vai ajudar o desenvolvimento do site, compartilhando a página com seus amigos

wave wave wave wave wave