Sobrecarga de função
# Sobrecarga de função

Sobrecarga de método permite a existência de vários métodos de mesmo nome, contanto que tenham assinaturas levemente diferentes, ou seja, variando em número, tipo de argumentos, valor de retorno e até variáveis diferentes. Assim, fica a cargo do compilador escolher, com base nas listas de argumentos, os procedimentos ou métodos a serem executados.

## Em orientação a objetos

Em orientação a objetos, a sobrecarga de método permite que existam métodos com o mesmo nome dentro de uma classe, na condição de que possuam tipo ou quantidade de argumentos diferentes, ou seja, tenham diferente assinatura. Métodos sobrecarregados podem ter, por exemplo, diferentes retornos, mas apenas se, antes, eles tiverem diferentes parâmetros, ou seja, essa não pode ser a única característica de distinção entre eles.

## Exemplo

* Veja a seguinte classe escrita em Java:
Quando o método soma é chamado no código, é papel do compilador identificar o método correspondente com base nos parâmetros da função.
* Exemplo da sobrecarga usando diagrama UML:

## Benefícios

A importância de permitir a sobrecarga de métodos não reside em uma mera conveniência para evitar que se tenha que escolher e usar nomes novos para cada definição, ou para evitar conflitos entre nomes existentes em um determinado escopo e, assim, evitar a "poluição" do espaço de nomes usados em programas.
A sobrecarga de métodos tem, outrossim, a propriedade fundamental de permitir que expressões e nomes definidos por meio do uso de símbolos sobrecarregados possam ser usados em contextos que requerem valores de tipos distintos, permitindo assim que sejam definidas novas abstrações polimórficas.
Como um exemplo bastante simples, considere que o símbolo + é sobrecarregado para adição de inteiros e números de ponto flutuante. Nesse caso, podemos ter uma única definição para computar a soma dos inteiros em uma lista, seja ela uma lista de inteiros ou uma lista de números de ponto flutuante.
Em outras palavras, podemos fazer uma única definição, polimórfica, da mesma forma como ocorre no caso, tão justamente louvado, do polimorfismo paramétrico.