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" que significa muitos e "metamorfose" que significa 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 à sua funcionalidade em tempo de execução. O compilador verifica as assinaturas do método para fazer isso.
Esse tipo de polimorfismo também é conhecido como ligação estática ou inicial.
Veja o exemplo de sobrecarga de método abaixo:
class Arithmetic {
cubo int (int x) {
return x * x * x;
}
cubo duplo (duplo x) {
return x * x * x;
}
cubo float (float x) {
return x * x * x;
}
public static void main (String [] args) {
Aritmética minhaMultiplicação = novo Aritmética ();
System.out.println ("O cubo de 5 é" + myMultiplication.cube (5));
System.out.println ("O cubo de 5.0 é" + myMultiplication.cube (5.0));
System.out.println ("O cubo de 0,5 é" + myMultiplication.cube (0,5));
}
}
Resultado:
O cubo de 5 é 125
O cubo de 5,0 é 125,0
O cubo de 0,5 é 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 ("
Obrigado por abrir uma conta conosco! ");
}
public static void main (String args []) {
Conta minha conta = nova conta ();
Poupança mySavings = novo Poupança ();
FixedDeposit myFixedDepo = new FixedDeposit ();
myAccount.message ();
mySavings.message ();
myFixedDepo.message ();
}
}
classe Poupança estende conta {
public void message () {
System.out.println ("
Obrigado por abrir uma conta poupança conosco! ");
}
}
class FixedDeposit extends Account {
public void message () {
System.out.println ("
Obrigado por abrir uma conta de Depósito Fixo conosco! ");
}
}
Resultado:
Obrigado por abrir uma conta conosco!
Obrigado por abrir uma conta poupança conosco!
Obrigado por abrir uma conta de depósito fixo conosco!
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.
mensagem nula final () {
System.out.println ("
Obrigado por abrir uma conta conosco! ");
}
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 ("
Eu posso me mover. ");
}
}
Abaixo está uma subclasse, chamada Peixe, que substitui mover():
classe Fish extends Animal {
public void move () {
System.out.println ("
Eu sei nadar.");
super.move ();
}
public static void main (String args []) {
Peixe Tilápia = Peixe novo ();
Tilapia.move ();
}
}
Resultado:
Eu sei nadar.
Eu posso me mover.
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.
Por quê? 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 aprender 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) é 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.
Aprendendo Java? Deixe os arrays manipularem seus dados com facilidade.
Leia a seguir
- Programação
- Java
- Tutoriais de codificação

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.
Assine a nossa newsletter
Junte-se ao nosso boletim informativo para dicas de tecnologia, análises, e-books grátis e ofertas exclusivas!
Mais um passo…!
Confirme seu endereço de e-mail no e-mail que acabamos de enviar.