Sobrecarga vs Sobrecarga
O método Overriding e o método Overloading são dois conceitos/técnicas/recurso encontrados em algumas linguagens de programação. Ambos os conceitos permitem que o programador forneça diferentes implementações para métodos com o mesmo nome. A substituição de método permite que o programador forneça uma implementação alternativa dentro de uma subclasse para um método já definido dentro de sua superclasse. A sobrecarga de métodos permite que o programador forneça diferentes implementações para vários métodos com o mesmo nome (dentro da mesma classe).
O que é Substituir?
Como mencionado acima, uma classe pode estender uma superclasse ou uma classe pai, em linguagens de programação orientadas a objetos. Uma classe filha pode ter seus próprios métodos ou, opcionalmente, ter suas próprias implementações para métodos já definidos em sua classe pai (ou em uma de suas classes avós). Então, quando o último acontece, é chamado de substituição de método. Em outras palavras, se a classe filha fornece uma implementação para um método com a mesma assinatura e tipo de retorno que um método já definido em uma de suas classes pai, esse método é dito sobrescrito (substituído) pela implementação da classe filha. Portanto, se houver um método substituído em uma classe, o sistema de tempo de execução terá que decidir qual implementação de método será usada. Esse problema é resolvido observando o tipo exato de objeto usado para invocá-lo. Se um objeto da classe pai for usado para invocar o método substituído, a implementação na classe pai será usada. Da mesma forma, se for um objeto da classe filha que é usado, então a implementação da classe filha é usada. Linguagens de programação modernas como Java, Eifell, C++ e Python permitem a substituição de métodos.
O que é sobrecarga?
A sobrecarga de métodos é um recurso fornecido por algumas linguagens de programação para criar mais de um método com o mesmo nome, mas com diferentes tipos de entrada e saída. Em linguagens de programação modernas como Java, C, C++ e VB. NET, esse recurso está disponível. Você pode sobrecarregar um método criando outro método com o mesmo nome, mas com uma assinatura de método diferente ou um tipo de retorno diferente (ou ambos). Por exemplo, se você tiver method1(type1 t1) e method1(type2 t2) dentro da mesma classe, eles estarão sobrecarregados. Então o sistema terá que decidir qual deles será executado quando for chamado. Essa diferenciação é feita observando o tipo do(s) parâmetro(s) passado(s) para o método. Se o argumento for do tipo1, a primeira implementação será chamada, enquanto se for do tipo2, a segunda implementação será chamada.
Qual é a diferença entre Overriding e Overloading?
Embora a substituição e a sobrecarga de métodos sejam usadas para fornecer um método com diferentes implementações, existem diferenças importantes entre esses dois conceitos/técnicas. Em primeiro lugar, os assuntos de sobreposição de métodos sempre permanecem em classes diferentes, enquanto os assuntos de sobrecarga de métodos permanecem na mesma classe. Isso significa que a substituição só é possível em linguagens de programação orientadas a objetos que permitem herança, enquanto a sobrecarga também pode estar disponível em uma linguagem não orientada a objetos. Em outras palavras, você substitui um método na superclasse, mas sobrecarrega um método dentro de sua própria classe.
Outra diferença é que os métodos sobrescritos têm o mesmo nome de método, assinatura de método e tipo de retorno, mas métodos sobrecarregados devem diferir na assinatura ou no tipo de retorno (o nome deve ser o mesmo). Para diferenciar entre dois métodos sobrescritos, o tipo exato de objeto que é usado para invocar os métodos id usados, enquanto que para diferenciar entre dois métodos sobrecarregados são usados os tipos dos parâmetros. Outra diferença importante é que a sobrecarga é resolvida em tempo de compilação, enquanto a substituição é resolvida em tempo de execução.