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á-
- O que é polimorfismo em Java?
- Polimorfismo Java em OOPs com Exemplo
- Substituição de método em Java
- Diferença entre sobrecarga e substituição
- O que é polimorfismo dinâmico?
- Diferença entre polimorfismo estático e dinâmico
- Super palavra-chave em Java
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
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
- Polimorfismo Java
- Tutorial de classe abstrata C# com exemplo:O que é abstração?
- O que é interface em c # com exemplo
- Método String Length () em Java:como encontrar com exemplo
- Método Java String charAt() com exemplo
- String Java contém() Método | Verificar substring com exemplo
- Java String EndsWith() Método com Exemplo
- Variável estática em Java:o que é bloco e método estático [exemplo]
- Interface vs classe abstrata em Java:qual é a diferença?
- Java BufferedReader:Como Ler Arquivo em Java com Exemplo