Polimorfismo em Java OOPs com exemplo

Índice:

Anonim

O que é polimorfismo em Java?

O polimorfismo em Java ocorre quando há uma ou mais classes ou objetos relacionados entre si por herança. Em outras palavras, é a capacidade de um objeto assumir muitas formas. A herança permite que os usuários herdem atributos e métodos, e o polimorfismo usa esses métodos para realizar diferentes tarefas. Então, o objetivo é a comunicação, mas a abordagem é diferente.

Por exemplo, você tem um smartphone para comunicação. O modo de comunicação que você escolher pode ser qualquer um. Pode ser uma ligação, uma mensagem de texto, uma mensagem multimídia, mail, etc. Então, o objetivo comum é a comunicação, mas a abordagem é diferente. Isso é chamado de polimorfismo.

Neste tutorial, você aprenderá-

  • O que é polimorfismo?
  • Polimorfismo Java em OOPs com Exemplo
  • Substituição de método
  • Diferença entre sobrecarga e sobreposição
  • O que é polimorfismo dinâmico?
  • Super Keyword
  • Diferença entre polimorfismo estático e dinâmico

Clique aqui se o vídeo não estiver acessível

Polimorfismo Java em OOPs com Exemplo

Temos uma classe pai, 'Conta' com função de depósito e retirada. Conta tem 2 classes-filho A operação de depósito e retirada é a mesma para contas poupança e à ordem. Portanto, os métodos herdados da classe Account funcionarão.

Mudança no requisito de software

Há uma mudança na especificação dos requisitos, algo tão comum na indústria de software. Você deve adicionar a funcionalidade de conta bancária privilegiada com facilidade de cheque especial.

Para um plano de fundo, saque a descoberto é uma facilidade onde você pode sacar uma quantia a mais do que o saldo disponível em sua conta.

Portanto, retire o método para necessidades privilegiadas para implementar novamente. Mas você não altera a parte testada do código em Poupança e conta à ordem. Esta é a vantagem do OOPS

Passo 1) De forma que quando o método "retirado" da conta poupança é chamado, um método da classe da conta pai é executado.

Passo 2) Mas quando o método "Withdraw" para a conta privilegiada (facilidade de saque a descoberto) é chamado, o método de retirada definido na classe privilegiada é executado. Isso é polimorfismo.

Substituição de método

Substituição de método é redefinir um método de superclasse em uma subclasse.

Regras para substituição de método

  • A assinatura do método, ou seja, o nome do método, a lista de parâmetros e o tipo de retorno devem corresponder exatamente.
  • O método sobrescrito pode ampliar a acessibilidade, mas não restringi-la, ou seja, se for privado na classe base, a classe filha pode torná-lo público, mas não vice-versa.

Exemplo

class Doctor{public void treatPatient(){// treatPatient method}class Surgeon extends Doctor{public void treatPatient(){// treatPatient method}}Class run{public static void main (String args[]){Doctor doctorObj = new Doctor()// treatPatient method in class Doctor will be executeddoctorObj.treatPatient();Surgeon surgeonObj = new Surgeon();// treatPatient method in class Surgeon will be executedsurgeonObj.treatPatient();}}

Diferença entre sobrecarga e sobreposição

Sobrecarga de método Substituição de método

A sobrecarga de método está na mesma classe, onde mais de um método tem o mesmo nome, mas assinaturas diferentes.

Substituição de método é quando um dos métodos na superclasse é redefinido na subclasse. Nesse caso, a assinatura do método permanece a mesma.

Ex:

void sum (int a , int b);void sum (int a , int b, int c);void sum (float a, double b);

Ex:

class X{public int sum(){// some code}}class Y extends X{public int sum(){//overridden method//signature is same}}

O que é polimorfismo dinâmico?

Polimorfismo dinâmico é o mecanismo pelo qual vários métodos podem ser definidos com o mesmo nome e assinatura na superclasse e subclasse. A chamada para um método substituído é resolvida em tempo de execução.

Exemplo de polimorfismo dinâmico:

Uma variável de referência da superclasse pode se referir a um objeto de subclasse

Doctor obj = new Surgeon();

Considere a declaração

obj.treatPatient();

Aqui, a variável de referência "obj" é da classe pai, mas o objeto para o qual ela aponta é da classe filha (conforme mostrado no diagrama).


obj.treatPatient () executará o método treatPatient () da subclasse - Cirurgião

Se uma referência de classe base for usada para chamar um método, o método a ser chamado é decidido pela JVM, dependendo do objeto para o qual a referência está apontando

Por exemplo, embora obj seja uma referência ao Doutor, ele chama o método do Cirurgião, pois aponta para um objeto Cirurgião

Isso é decidido durante o tempo de execução e, portanto, denominado polimorfismo dinâmico ou de tempo de execução

Super Keyword

E se o método treatPatient na classe Surgeon quiser executar a funcionalidade definida na classe Doctor e, em seguida, executar sua própria funcionalidade específica?
Neste caso, palavra-chave

superpode ser usado para acessar métodos da classe pai da classe filha.
O método treatPatient na classe Surgeon pode ser escrito como:
treatPatient(){super.treatPatient();//add code specific to Surgeon}

A palavra-chave super pode ser usada para acessar qualquer membro de dados ou métodos da superclasse na subclasse.Exemplo: -Para aprender herança, polimorfismo e superpalavra-chave

Etapa 1) Copie o seguinte código em um Editor

public class Test{public static void main(String args[]){X x= new X();Y y = new Y();y.m2();//x.m1();//y.m1();//x = y;// parent pointing to object of child//x.m1() ;//y.a=10;}}class X{private int a;int b;public void m1(){System.out.println("This is method m1 of class X");}}class Y extends X{int c; // new instance variable of class Ypublic void m1(){// overriden methodSystem.out.println("This is method m1 of class Y");}public void m2(){super.m1();System.out.println("This is method m2 of class Y");}}

Etapa 2) Salvar, compilar e executar o código. Observe a saída.
Etapa 3) Retire os comentários das linhas # 6-9. Salve, compile e execute o código. Observe a saída.
Etapa 4) Remova a linha de comentários nº 10. Salve e compile o código.
Etapa 5) Erro =? Isso ocorre porque a subclasse não pode acessar membros privados da superclasse.

Diferença entre polimorfismo estático e dinâmico

Polimorfismo Estático Polimorfismo Dinâmico
Relaciona-se à sobrecarga do método. Relaciona-se à substituição de método.

Erros, se houver, são resolvidos em tempo de compilação. Uma vez que o código não é executado durante a compilação, daí o nome estático.

Ex:

void sum (int a , int b);void sum (float a, double b);int sum (int a, int b); //compiler gives error.

No caso de uma variável de referência estar chamando um método sobrescrito, o método a ser chamado é determinado pelo objeto para o qual sua variável de referência está apontando. Isso só pode ser determinado em tempo de execução, quando o código está em execução, daí o nome dinâmico.

Ex:

//reference of parent pointing to child objectDoctor obj = new Surgeon();// method of child calledobj.treatPatient();