Tipos de polimorfismo em Java [Polimorfismo Estático e Dinâmico com Exemplos]

Publicados: 2021-06-18

Índice

O que é polimorfismo em Java?

Um dos conceitos importantes em Programação Orientada a Objetos (POO) é o polimorfismo, que significa que uma única ação pode ser realizada de diferentes maneiras. É derivado das palavras gregas: poli e morfos que significam muitos e formas. As diferentes formas existem quando estão relacionadas por herança.

Assim como a herança que herda métodos e atributos de uma classe diferente, o polimorfismo aplica esses métodos e executa tarefas diferentes. Um objeto é capaz de se moldar em várias formas através do polimorfismo.

Ou seja, uma entidade pode realizar diferentes operações em diferentes cenários. Um dos usos mais comuns de polimorfismo na Programação Orientada a Objetos é quando uma referência de classe pai é usada para se referir a um objeto de classe filho. Leia mais sobre vários conceitos e exemplos de OOPs.

O polimorfismo em Java pode ser alcançado através de três métodos:

Substituição de método: Se uma superclasse e uma subclasse consistem no mesmo método, a substituição de método se refere ao processo de sobrescrever o método na superclasse pelo método na subclasse. Como resultado, o mesmo método será usado em diferentes condições realizando diferentes operações.

Saída do programa:

Linguagem de programação Java

Língua Inglesa Comum

  1. Sobrecarga de Método: A sobrecarga de método refere-se ao processo de criação de métodos com o mesmo nome, mas com parâmetros diferentes. Os exemplos incluem: void func() { … }, void func(int a) { … }, float func(double a) { … }, float func(int a, float b) { … }.

Saída

**********

##########

  1. Sobrecarga de operador: A sobrecarga de operador é um conceito em Java onde um operador se comporta de maneira diferente com operandos diferentes. Exemplos incluem:
  • O operador “+” pode ser usado tanto na adição numérica quanto na concatenação de strings.
Adição numérica Concatenação de strings
int a = 5;

intb = 6;

int soma = a + b; // Saída = 11

String primeiro = “Python”;

String segundo = “Programação”;

nome = primeiro + segundo; // Saída = Programação Python

  • Os operadores &,|, e ! pode ser usado para sobrecarga lógica e bit a bit.

Tipos de polimorfismo em Java

A Programação Orientada a Objetos se concentra em quatro conceitos básicos, ou seja, abstração, encapsulamento, herança e polimorfismo. Polimorfismo é a capacidade de processar objetos de forma diferente com base em sua classe e tipos de dados.

Existem dois tipos de polimorfismo em Java : polimorfismo de tempo de compilação e polimorfismo de tempo de execução em Java . Este polimorfismo java também é referido como polimorfismos estáticos e polimorfismos dinâmicos.

1. Polimorfismo estático (ou polimorfismo em tempo de compilação)

Como a maioria das outras linguagens de programação OOP, o polimorfismo Java permite a incorporação de vários métodos dentro de uma classe. Os métodos usam o mesmo nome, mas o parâmetro varia. Isso representa o polimorfismo estático. Este polimorfismo é resolvido durante o tempo do compilador e é obtido através da sobrecarga do método. Três critérios são fornecidos nos quais os conjuntos de parâmetros devem diferir:

  • O número dos parâmetros deve variar.
  • Os tipos de parâmetro devem ser diferentes.
  • Ordem diferente de parâmetros. Por exemplo, se um método aceita uma string e uma longa, enquanto o outro método aceita uma longa e uma string. No entanto, esse tipo de pedido dificulta o entendimento da API.

Devido à diferença nos parâmetros, cada método tem uma assinatura diferente. O compilador Java tem uma ideia de qual método é chamado.

Aprenda cursos de software online das melhores universidades do mundo. Ganhe Programas PG Executivos, Programas de Certificado Avançado ou Programas de Mestrado para acelerar sua carreira.

Exemplo de polimorfismo estático

Uma das maneiras pelas quais Java suporta polimorfismo estático é a sobrecarga de métodos. Um exemplo mostrando o caso de sobrecarga de método em polimorfismo estático é mostrado abaixo:

Exemplo:

class Calculadora Simples

{

int add(int a, int b)

{

retorna a+b;

}

int add(int a, int b, int c)

{

retorne a+b+c;

}

}

demonstração de classe pública

{

public static void main(String args[])

{

SimpleCalculator obj = new SimpleCalculator();

System.out.println(obj.add(25, 25));

System.out.println(obj.add(25, 25, 30));

}

}

Saída do programa

50

80

2. Polimorfismo Dinâmico (ou polimorfismo de tempo de execução em Java)

Nesta forma de polimorfismo em java , o compilador não determina o método a ser executado. É a Java Virtual Machine (JVM) que executa o processo em tempo de execução. Polimorfismo dinâmico refere-se ao processo quando uma chamada para um processo substituído é resolvida em tempo de execução. A variável de referência de uma superclasse chama o método substituído. Os métodos implementados pela subclasse e pela superclasse fornecem funcionalidades diferentes enquanto compartilham o mesmo nome.

Compreender o processo de Upcasting é crucial antes de entender o conceito de polimorfismo em tempo de execução. O upcasting refere-se ao processo em que um objeto da classe filha é referenciado por uma variável de referência da superclasse. Aprenda sobre polimorfismo em PHP.

Exemplo de polimorfismo dinâmico (ou tempo de execução)

Exemplo 1:

Duas classes Bike e Splendor são criadas e a classe Splendor estende a classe Bike substituindo seu método run(). O método run() é chamado pela variável de referência da classe pai. Como o método da subclasse está substituindo o método da classe pai; o método da subclasse é invocado em tempo de execução.

O programa

classe Bicicleta{

void run(){System.out.println(“running”);}

}

classe Splendor estende Bike{

void run(){System.out.println(“andando com segurança com 30km”);}

público estático void main(String args[]){

Bike b = new Splendor();//upcasting

b.run();

}

}

Saída: caminhando com segurança com 60km

Exemplo 2

Duas classes com os nomes de “ABC” e “XYZ” são criadas onde XYZ é uma classe filha e ABC é uma classe pai. Aqui, o método myMethod() da classe pai é substituído pela classe filha. O objeto de classe filho é atribuído à referência de classe pai.

Programa:

classe ABC{

public void meuMétodo(){

System.out.println(“Método substituído”);

}

}

classe pública XYZ estende ABC{

public void meuMétodo(){

System.out.println(“Método de substituição”);

}

public static void main(String args[]){

ABC obj = new XYZ();

obj.meuMétodo();

}

}

Saída

Método de substituição

Conclusão

O conceito de polimorfismo em java é um dos recursos mais úteis na programação orientada a objetos. Além disso, a capacidade de invocar um método tanto em tempo estático quanto em tempo de execução amplia sua aplicabilidade.

A ideia por trás de trazer o conceito de polimorfismo é a flexibilidade. Além disso, a capacidade de processar um grande número de objetos em uma única variável de referência torna a codificação um pouco mais fácil. Portanto, o conceito deve ser usado nas tarefas diárias de codificação e abraçar sua eficácia.

Se você quiser saber mais sobre tecnologia de software, seu desenvolvimento e o mecanismo por trás disso, você pode conferir o curso Executive PG Program in Software Development – ​​Specialization in Full Stack Development oferecido pelo upGrad. O curso de especialização é um programa online de 23 semanas que oferece mais de 300 estudos de caso para aumentar seu conhecimento e ferramentas disponíveis e linguagem de programação para aprimorar suas habilidades práticas. Se você tiver mais alguma dúvida relacionada ao curso, envie-nos uma mensagem. Nossa equipe entrará em contato com você.

Planeje sua carreira de desenvolvimento de software agora.

Candidate-se ao Programa PG Executivo em Desenvolvimento de Software do IIIT-B