CodeGym /Blogue Java /Random-PT /Polimorfismo em Java
John Squirrels
Nível 41
San Francisco

Polimorfismo em Java

Publicado no grupo Random-PT
Oi! Hoje concluímos uma série de lições sobre os princípios da POO. Nesta lição, falaremos sobre o polimorfismo Java. Polimorfismo é a capacidade de trabalhar com vários tipos como se fossem o mesmo tipo. Além disso, o comportamento dos objetos será diferente dependendo do seu tipo. Vamos dar uma olhada mais de perto nesta declaração. Vamos começar com a primeira parte: 'a capacidade de trabalhar com vários tipos como se fossem o mesmo tipo'. Como tipos diferentes podem ser iguais? Parece um pouco estranho :/ Como usar o polimorfismo - 1Na verdade, é tudo muito simples. Por exemplo, esta situação surge durante o uso normal da herança. Vamos ver como isso funciona. Suponha que tenhamos uma classe pai Cat simples com um único método run() :

public class Cat {

   public void run() {
       System.out.println("Run!");
   }
}
Agora vamos criar três classes que herdam Cat : Lion , Tiger e Cheetah .

public class Lion extends Cat {

   @Override
   public void run() {
       System.out.println("Lion runs at 80 km/h");
   }
}

public class Tiger extends Cat {

   @Override
   public void run() {
       System.out.println("Tiger runs at 60 km/h");
   }
}

public class Cheetah extends Cat {

   @Override
   public void run() {
       System.out.println("Cheetah runs at up to 120 km/h");
   }
}
Então temos 3 classes. Vamos modelar a situação onde podemos trabalhar com eles como se fossem a mesma classe. Imagine que um de nossos gatos está doente e precisa da ajuda do Dr. Dolittle. Vamos tentar criar uma classe Dolittle que possa curar leões, tigres e guepardos.

public class Dolittle {

   public void healLion(Lion lion) {

       System.out.println("Lion is healthy!");
   }

   public void healTiger(Tiger tiger) {

       System.out.println("Tiger is healthy!");
   }

   public void healCheetah(Cheetah cheetah) {

       System.out.println("Cheetah is healthy!");
   }
}
Parece que o problema está resolvido: a aula está escrita e pronta para começar. Mas o que faremos se quisermos estender nosso programa? Atualmente, temos apenas 3 tipos: leões, tigres e chitas. Mas existem mais de 40 tipos de gatos no mundo. Imagine o que aconteceria se adicionássemos classes separadas para manuls, onças, Maine Coons, gatos domésticos e todo o resto. Como usar o polimorfismo - 2O programa em si funcionará, é claro, mas temos que adicionar constantemente novos métodos à classe Dolittle para curar cada tipo de gato. Como resultado, crescerá para tamanhos sem precedentes. É aqui que entra o polimorfismo — "a capacidade de trabalhar com vários tipos como se fossem do mesmo tipo" —. Não precisamos criar inúmeros métodos para fazer a mesma coisa — curar um gato. Um método é suficiente para todos eles:

public class Dolittle {

   public void healCat(Cat cat) {

       System.out.println("The patient is healthy!");
   }
}
O método healCat() pode aceitar objetos Lion , Tiger e Cheetah — todos eles são instâncias de Cat :

public class Main {

   public static void main(String[] args) {

       Dolittle dolittle = new Dolittle();

       Lion simba = new Lion();
       Tiger shereKhan = new Tiger();
       Cheetah chester = new Cheetah();

       dolittle.healCat(simba);
       dolittle.healCat(shereKhan);
       dolittle.healCat(chester);
   }
}
Saída do console: O paciente está saudável! O paciente é saudável! O paciente é saudável! Então nosso DolittleA classe trabalha com diferentes tipos como se fossem do mesmo tipo. Agora vamos abordar a segunda parte: "além disso, o comportamento dos objetos será diferente dependendo do seu tipo". É tudo muito simples. Na natureza, cada gato corre de uma maneira diferente. No mínimo, eles correm em velocidades diferentes. Entre nossos três felinos, o guepardo é o mais rápido, enquanto o tigre e o leão correm mais devagar. Em outras palavras, seu comportamento é diferente. O polimorfismo faz mais do que apenas nos permitir usar tipos diferentes como um só. Também nos permite lembrar suas diferenças, preservando o comportamento específico de cada um deles. O exemplo a seguir ilustra isso. Suponha que nossos gatos, após uma recuperação bem-sucedida, decidam fazer uma pequena corrida. Vamos adicionar isso à nossa classe Dolittle :

public class Dolittle {

   public void healCat(Cat cat) {

       System.out.println("The patient is healthy!");
       cat.run();
   }
}
Vamos tentar executar o mesmo código para tratar três animais:

public static void main(String[] args) {

   Dolittle dolittle = new Dolittle();

   Lion simba = new Lion();
   Tiger shereKhan = new Tiger();
   Cheetah chester = new Cheetah();

   dolittle.healCat(simba);
   dolittle.healCat(shereKhan);
   dolittle.healCat(chester);
}
E aqui estão os resultados: O paciente está saudável! Leão corre a 80 km/h. O paciente é saudável! Tigre corre a 60 km/h. O paciente é saudável! Cheetah corre a até 120 km/h Aqui vemos claramente que o comportamento específico dos objetos é preservado, embora tenhamos passado todos os três animais para o método após 'generalizá-los' para Cat . Devido ao polimorfismo, Java lembra bem que esses não são simplesmente três gatos quaisquer. Eles são um leão, um tigre e uma chita, cada um correndo de forma diferente. Isso ilustra a principal vantagem do polimorfismo: flexibilidade. Quando precisamos implementar alguma funcionalidade compartilhada por muitos tipos, leões, tigres e guepardos simplesmente se tornam 'gatos'. Todos os animais são diferentes, mas em algumas situações um gato é um gato, independente de sua espécie :) Aqui está uma confirmação em vídeo para você.
Quando essa 'generalização' é indesejada e, em vez disso, precisamos que cada espécie se comporte de maneira diferente, cada tipo faz sua própria coisa. Graças ao polimorfismo, você pode criar uma única interface (conjunto de métodos) para uma ampla gama de classes. Isso torna os programas menos complicados. Mesmo que expandíssemos o programa para suportar 40 tipos de gatos, ainda teríamos a interface mais simples: um único método run() para todos os 40 gatos.
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION