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:

  1. 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.
  2. 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.
  3. 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 .
  4. Ao falar sobre ligação, a Sobrecarga possui ligação estática, enquanto a Substituição possui ligação dinâmica.
  5. 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).
  6. 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
1A 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.
2A 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.
3A 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.
4A 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.
5O 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.
6Mé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.
7Os 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 -

  1. Programação Funcional vs POO
  2. O que é substituição em JavaScript?
  3. Como a sobrecarga funciona em PHP?
  4. Visão geral da sobrecarga em c #
  5. Substituindo em Java
  6. Sobrecarga de Python
  7. Sobrecarregando e substituindo em c #