Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Industrial programming >> Java

Polimorfismo em Java OOPs com Exemplo:O que é, Dinâmico

O que é polimorfismo em Java?


Polimorfismo em Java ocorre quando há uma ou mais classes ou objetos relacionados entre si por herança. É 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 coisa. Pode ser uma chamada, uma mensagem de texto, uma mensagem de imagem, e-mail, etc. Então, o objetivo comum é a comunicação, mas a abordagem é diferente. Isso é chamado de polimorfismo. Agora, vamos aprender Polimorfismo em Java com exemplo.

Neste tutorial Java, você aprenderá-




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 saque. A conta tem 2 classes filhas

A operação de depósito e saque é a mesma para contas Poupança e Corrente. Portanto, os métodos herdados da classe Account funcionarão.




Exemplo de polimorfismo Java


Mudança no requisito de software


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

Para um fundo, o cheque especial é uma facilidade onde você pode sacar um valor superior ao disponível do saldo em sua conta.

Portanto, o método de retirada para privilégios precisa ser implementado novamente. Mas você não altera o pedaço de código testado em Poupança e conta corrente. Esta é a vantagem do OOPS



Etapa 1) De tal forma que quando o método “retirado” para conta poupança é chamado, um método da classe de conta pai é executado



Etapa 2) Mas quando o método “Retirada” para a conta privilegiada (facilidade de saque a descoberto) é chamado, o método de retirada definido na classe privilegiada é executado. Este é o polimorfismo em OOPs.


Sobreposição de métodos em Java


A 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 substituído pode ampliar a acessibilidade, mas não reduzi-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 executed
    doctorObj.treatPatient();
   
    Surgeon surgeonObj = new Surgeon();
    // treatPatient  method in class Surgeon  will be executed
    surgeonObj.treatPatient();
  }
}

Diferença entre sobrecarga e substituição

Método de sobrecarga

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. A substituição de métodos ocorre quando um dos métodos da 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 em OOPs é 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 afirmação
obj.treatPatient();

Aqui a variável de referência “obj” é da classe pai, mas o objeto para o qual ela está apontando é da classe filha (como mostrado no exemplo de diagrama de polimorfismo abaixo).



obj.treatPatient() irá 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 invocado é decidido pela JVM, dependendo do objeto para o qual a referência está apontando

Por exemplo, embora obj seja uma referência a Doctor, ele chama o método de Surgeon, pois aponta para um objeto Surgeon

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

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


O Polimorfismo Estático em Java é um tipo de polimorfismo que coleta as informações para chamar um método em tempo de compilação, enquanto o Polimorfismo Dinâmico é um tipo de polimorfismo que coleta as informações para chamar um método em tempo de execução.

Polimorfismo Estático

Polimorfismo Dinâmico
Relaciona-se à sobrecarga de métodos. Relaciona-se à substituição de métodos.
Erros, se houver, são resolvidos em tempo de compilação. Como 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.

Caso uma variável de referência esteja chamando um método sobrescrito, o método a ser invocado é 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 dynamic.

Ex:
//reference of parent pointing to child object
 Doctor obj = new Surgeon();
// method of child called
obj.treatPatient();

Super palavra-chave em Java


E se o método treatPatient na classe Surgeon quiser executar a funcionalidade definida na classe Doctor e depois executar sua própria funcionalidade específica?

Nesse caso, a palavra-chave super pode 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.

A seguir, aprenderemos sobre a palavra-chave Super, Herança e Polimorfismo em Java com programas de exemplo.

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 Y
         public void m1(){
            // overriden method
            System.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) Salve, compile e execute o código. Observe a saída.

Etapa 3) Descomente as linhas # 6-9. Salve, compile e execute o código. Observe a saída.

Etapa 4) Descomente a linha # 10 . Salve e compile o código.

Etapa 5) Erro =? Isso ocorre porque a subclasse não pode acessar membros privados da superclasse.

Resumo

  • O polimorfismo em Programação Orientada a Objetos ocorre quando há uma ou mais classes ou objetos relacionados entre si por herança. É a capacidade de um objeto assumir muitas formas.
  • A substituição de método está redefinindo um método de superclasse em uma subclasse.
  • Polimorfismo dinâmico em Java é o mecanismo pelo qual vários métodos podem ser definidos com o mesmo nome e assinatura na superclasse e subclasse.
  • O polimorfismo estático em Java é um tipo de polimorfismo que coleta as informações para chamar um método em tempo de compilação, enquanto o polimorfismo dinâmico é um tipo de polimorfismo que coleta as informações para chamar um método em tempo de execução.
  • A palavra-chave Super pode ser usada para acessar métodos da classe pai da classe filha.

Java

  1. Polimorfismo Java
  2. Tutorial de classe abstrata C# com exemplo:O que é abstração?
  3. O que é interface em c # com exemplo
  4. Método String Length () em Java:como encontrar com exemplo
  5. Método Java String charAt() com exemplo
  6. String Java contém() Método | Verificar substring com exemplo
  7. Java String EndsWith() Método com Exemplo
  8. Variável estática em Java:o que é bloco e método estático [exemplo]
  9. Interface vs classe abstrata em Java:qual é a diferença?
  10. Java BufferedReader:Como Ler Arquivo em Java com Exemplo