Diferença entre Sobrecarga vs Substituição
Antes de nos aprofundarmos nas diferenças entre Sobrecarregar e Sobrescrever, precisamos entender o que eles realmente são e os cenários em que são particularmente usados? Os iniciantes em Java geralmente ficam confusos entre os dois, mas são totalmente diferentes um do outro e usados em seus cenários específicos. A sobrecarga de método ocorre quando temos vários métodos com o mesmo nome, mas com assinaturas diferentes. As assinaturas incluem o número de parâmetros do método, o tipo de dados dos parâmetros. O tipo de retorno do método não está incluído na assinatura. Isso é feito para fornecer a funcionalidade de reutilizar o mesmo nome de método e aumentar a legibilidade dos programas. A substituição de método ocorre no caso de Herança, na qual a classe derivada herda as propriedades da classe base. Envolve a definição do mesmo método da classe base em uma classe derivada com o mesmo parâmetro e tipo de retorno para definir qualquer funcionalidade / implementação específica desse método na classe derivada.
Considere um cenário em que um programador precise encontrar a área de uma figura geométrica. A área de cada figura varia uma da outra. Por exemplo, para encontrar a área do quadrado, é necessário apenas um único parâmetro 'lado', para o retângulo são necessários dois parâmetros 'comprimento e largura', enquanto que para o círculo 'é necessário um raio que pode ser decimal. Para resolver esse objetivo, a sobrecarga do método é feita na qual a área do método possui parâmetros e tipos de dados diferentes para uma área de figuras diferentes. Pense na situação do sistema bancário, embora vários métodos e procedimentos para todos os funcionários sejam os mesmos, exceto em algumas taxas de juros semelhantes para cidadãos normais e idosos. Nesse caso, a Substituição de método é usada com implementações diferentes do método Taxas de juros nas classes de cidadão Normal e Idoso que herdam a classe base 'Taxas bancárias'.
Comparação cara a cara entre sobrecarga e substituição (infográficos)
Abaixo está a comparação dos 7 principais entre sobrecarga e substituição :
Principais diferenças entre sobrecarga e substituição
Vamos discutir algumas das principais diferenças principais entre Sobrecarga e Substituição:
- Na sobrecarga de método, os métodos podem ter o mesmo ou diferentes especificadores / modificadores de acesso no nome do método, enquanto que no método Substituição de Método do caso base (método substituído) deve ter um especificador de acesso restrito que o método de uma classe pai. Por exemplo, se o método de uma classe base estiver protegido, o método filho private não será permitido.
- Quando comparada em termos de desempenho, a sobrecarga tem um desempenho melhor em comparação com a Substituição, porque a sobrecarga do método é feita em tempo de compilação.
- O tipo de retorno de um método nunca faz parte do método Sobrecarga, portanto, não importa se métodos sobrecarregados diferentes tenham o mesmo ou diferente tipo de retorno, enquanto que no método Substituindo o tipo de retorno, os métodos da classe pai e da classe base precisam ser exatamente os mesmos .
- Ao falar sobre ligação, a Sobrecarga possui ligação estática, enquanto a Substituição possui ligação dinâmica.
- A exceção lançada pelo método não importa no método sobrecarregado, se um método está lançando uma exceção, outros métodos sobrecarregados podem / não podem lançar a mesma exceção ou exceção diferente, mas no caso de Substituição, o método Substituição (método na classe derivada) não pode lançar exceção de hierarquia superior a o método substituído (método na classe base).
- Todos os especificadores, como private, final e static, não podem ser usados na Substituição de Método, enquanto todos os especificadores de acesso são permitidos na sobrecarga de método.
Tabela de comparação de sobrecarga vs substituição
A tabela abaixo resume as comparações entre Sobrecarga e Substituição:
S.No. | Sobrecarga | Substituindo |
1 | A sobrecarga de método é feita para ter uma definição aprimorada de métodos de acordo com várias situações. | A substituição de método é feita para fornecer uma implementação específica dos métodos definidos na classe pai. |
2 | A sobrecarga de método é feita em uma única classe na qual uma classe possui definições diferentes de um método. | A substituição de método é feita entre duas classes que têm um relacionamento IS-A (Herança) entre elas. |
3 | A sobrecarga de método é feita em tempo de compilação e, portanto, é conhecida como polimorfismo em tempo de compilação. | A substituição de método é feita em tempo de execução e, portanto, é conhecida como polimorfismo em tempo de execução. |
4 | A ordem dos parâmetros, o tipo de dados e a contagem de parâmetros precisam ser diferentes para a Sobrecarga de método. | A ordenação de parâmetros, o tipo de dados e a contagem precisam ser os mesmos para Substituição de Método. |
5 | O tipo de retorno de um método pode ser igual ou diferente no caso de Sobrecarga de método. Isso não importa. | O tipo de retorno de um método precisa ser o mesmo na classe pai e filho no caso de Substituição de Método. |
6 | Métodos estáticos podem ser sobrecarregados, ou seja, podemos ter diferentes métodos estáticos sobrecarregados na mesma classe. | Os métodos estáticos nunca podem ser substituídos, ou seja, o método estático em uma classe pai e na classe base não tem relação entre eles. |
7 | Os métodos privado e final podem ser sobrecarregados em uma classe, ou seja, uma classe pode ter sobrecarregado mais de 1 método privado e final. | Métodos particulares e finais nunca podem ser substituídos em uma classe filho. |
Exemplo de Sobrecarga de Método:
class FIgures(
public int area(int side)
(
return side*side;
)
public int area(int length, int breadth) //method overloading
(
return length*breadth;
)
public static void main(String() args)
(
Figures f = new Figures ();
System.out.println(“Area of Square “+ f.area(10));
System.out.println(“Area of Rectangle “+ f.area(12, 10));
)
)
Resultado:
Área da Praça 100
Área do retângulo 120
No exemplo acima, o método 'area ()' está sobrecarregado e possui parâmetros diferentes nos dois métodos sobrecarregados. Como a área precisa descobrir o quadrado e o retângulo, mas com parâmetros diferentes.
Exemplo de substituição de método:
class BankRates( // parent(base) class
void rates()
(
System.out.println(“Rates for normal citizen is 3.5%”);
)
)
class SeniorCItizen extends BankRates( //child class inheriting parent class
void rates() // method overriding
(
System.out.println(“Rates for senior citizens is 4.5%”);
)
)
class Bank(
public static void main(String() args)
(
SeniorCItizen sc = new BankRates(); sc.rates();
)
)
Resultado:
Taxas para idosos é de 4, 5%
No exemplo acima, o método 'rates ()' é substituído na classe derivada 'SeniorCitizen' porque também queremos as taxas de método na classe SeniorCitizen, mas com uma implementação diferente.
Conclusão
A explicação acima mostra claramente a diferença entre Sobrecarga x Substituição e os cenários específicos em que esses dois são usados. Antes da programação, é preciso entender esses conceitos principais de Java, pois eles formam a base de muitas coisas e ajudam a entender facilmente os conceitos mais avançados.
Artigos recomendados
Este foi um guia para a principal diferença entre Sobrecarga x Substituição. Aqui também discutimos as principais diferenças entre Sobrecarregar e Sobrescrever com infográficos e tabela de comparação. Você também pode consultar os seguintes artigos para saber mais -
- Programação Funcional vs POO
- O que é substituição em JavaScript?
- Como a sobrecarga funciona em PHP?
- Visão geral da sobrecarga em c #
- Substituindo em Java
- Sobrecarga de Python
- Sobrecarregando e substituindo em c #