Polimorfismo em Java: como sobrecarregar ou substituir métodos

Polimorfismo em Java: como sobrecarregar ou substituir métodos

A sobrecarga e a substituição de métodos são as duas maneiras pelas quais Java demonstra polimorfismo. O polimorfismo vem de uma combinação de duas palavras gregas: 'poli' significando muitos e 'metamorfose' significando forma. Portanto, o polimorfismo permite que os métodos assumam muitas formas.





Siga este guia para aprender como sobrecarregar ou substituir métodos em Java.





O que é sobrecarga de método?

'Sobrecarga de método' refere-se à definição de métodos diferentes em uma classe com o mesmo nome. Os métodos devem ter assinaturas diferentes. Uma assinatura de método é a combinação do nome de um método e lista de parâmetros. Não inclui o tipo de retorno.





O compilador sabe qual método usar, verificando o tipo, o número de parâmetros e a ordem em que são colocados.

Relacionado: Explorando a herança na linguagem de programação Java



A sobrecarga de método demonstra polimorfismo em tempo de compilação. Polimorfismo de tempo de compilação significa que o compilador Java vincula um objeto a sua funcionalidade em tempo de execução. O compilador verifica as assinaturas do método para fazer isso.

Este tipo de polimorfismo também é conhecido como ligação estática ou inicial.





Veja o exemplo de sobrecarga de método abaixo:

class Arithmetic{
int cube(int x){
return x*x*x;
}
double cube(double x){
return x*x*x;
}
float cube(float x){
return x*x*x;
}
public static void main(String[] args){
Arithmetic myMultiplication = new Arithmetic();
System.out.println('The cube of 5 is ' + myMultiplication.cube(5));
System.out.println('The cube of 5.0 is ' + myMultiplication.cube(5.0));
System.out.println('The cube of 0.5 is ' + myMultiplication.cube(0.5));
}
}

Saída:





The cube of 5 is 125
The cube of 5.0 is 125.0
The cube of 0.5 is 0.125

O código acima mostra como você pode obter um cubo de diferentes tipos ( int , Duplo , flutuador ) usando o mesmo método.

Geralmente, a sobrecarga de método é usada para definir métodos semelhantes com diferentes tipos de parâmetros.

O que é o método substituindo?

Isso se refere a uma implementação diferente de um método em uma subclasse. O método já deve ter sido definido na classe pai.

O método de substituição (ou seja, aquele na subclasse) deve ter a mesma assinatura de método da superclasse. O tipo de retorno do método de substituição pode ser o mesmo ou um subtipo daquele da superclasse.

A substituição geralmente é usada para incluir uma implementação específica do comportamento de um objeto na subclasse.

class Account{
public void message() {
System.out.println('
Thank you for opening an account with us!');
}
public static void main(String args[]) {
Account myAccount = new Account();
Savings mySavings = new Savings();
FixedDeposit myFixedDepo = new FixedDeposit();
myAccount.message();
mySavings.message();
myFixedDepo.message();
}
}
class Savings extends Account {
public void message() {
System.out.println('
Thank you for opening a Savings account with us!');
}
}
class FixedDeposit extends Account {
public void message() {
System.out.println('
Thank you for opening a Fixed Deposit account with us!');
}
}

Saída:

Thank you for opening an account with us!
Thank you for opening a Savings account with us!
Thank you for opening a Fixed Deposit account with us!

O exemplo acima mostra como o método mensagem() é sobrescrito nas subclasses Poupança e FixedDeposit . Mensagens diferentes serão exibidas para titulares de contas bancárias com uma conta poupança e aqueles com uma conta de depósito fixo.

Relacionado: O que você precisa saber sobre o uso de strings em Java

Também é importante notar que a substituição de método demonstra polimorfismo de tempo de execução ou despacho de método dinâmico. Isso significa que o método a ser chamado é resolvido em tempo de execução e não na compilação.

Para evitar que um método seja substituído, use a palavra-chave final .

final void message (){
System.out.println('
Thank you for opening an account with us!');
}

Quando uma subclasse tenta sobrescrevê-lo, ocorrerá um erro de compilação.

Idealmente, todos os métodos chamados em um construtor devem ser final . Isso evita quaisquer alterações não intencionais que possam ser causadas pelas subclasses.

Às vezes, você pode precisar acessar um método sobrescrito dentro do método sobrescrito. Você pode usar a palavra-chave super seguido pelo operador ponto ( . ) e o nome do método nesse caso.

Considere a superclasse Animal .

class Animal{
public void move() {
System.out.println('
I can move.');
}
}

Abaixo está uma subclasse, chamada Peixe , que substitui mover() :

class Fish extends Animal {
public void move() {
System.out.println('
I can swim.');
super.move();
}
public static void main(String args[]){
Fish Tilapia = new Fish();
Tilapia.move();
}
}

Saída:

desktop remoto de windows para linux
I can swim.
I can move.

Ao substituir um método, você também precisa estar ciente do modificador de acesso usado. O modificador na subclasse deve ter o mesmo nível de visibilidade ou mais alto do que na classe base. Por exemplo, se o método na classe base for definido como protegido , então o método de substituição pode ser protegido ou público .

Código simples com polimorfismo

A substituição e a sobrecarga de métodos são importantes para a simplificação do código, e um código simples é uma boa prática.

Porque? Imagine uma base de código complexa com mais detalhes do que a Grand Central Station. Agora imagine que um inseto devastador comece a destruir seu trabalho árduo diante de seus olhos. Você precisa isolar a fonte da infecção e fazer isso rapidamente.

Boa sorte, você não simplificou seu código ... Agora você está prestes a receber uma verdadeira lição de criptografia. Empregar estruturas de dados eficazes e fazer o que puder para encurtar o código (como manter o DRY em mente) é a sua melhor defesa contra uma situação como essa.

O próximo passo em sua lista de aprendizagem Java deve ser trabalhar com matrizes. Eles são estruturas de dados importantes usadas para armazenar lotes de pontos de dados.

Compartilhado Compartilhado Tweet O email Como criar e realizar operações em matrizes em Java

Aprendendo Java? Deixe que os arrays gerenciem seus dados com facilidade.

Leia a seguir
Tópicos relacionados
  • Programação
  • Java
  • Tutoriais de codificação
Sobre o autor Jerome Davidson(22 artigos publicados)

Jerome é redator da MakeUseOf. Ele cobre artigos sobre programação e Linux. Ele também é um entusiasta da criptografia e está sempre atento à indústria de criptografia.

Mais de Jerome Davidson

Assine a nossa newsletter

Junte-se ao nosso boletim informativo para dicas de tecnologia, análises, e-books grátis e ofertas exclusivas!

Clique aqui para se inscrever