Sobrecarga de métodos

Nosso tópico novo e interessante para hoje é sobrecarga de método . Tenha cuidado — sobrecarga de método não deve ser confundida com substituição de método.

Ao contrário da substituição, a sobrecarga é uma operação muito simples. Na verdade, não é uma operação sobre métodos, embora às vezes seja referido pelo terrível termo polimorfismo paramétrico .

A questão aqui é que todos os métodos dentro de uma classe devem ter nomes únicos. Bem, isso não é totalmente preciso. Bem, mais precisamente, isso não é nada preciso. O nome do método não precisa ser exclusivo. O que deve ser único é a união do nome do método e os tipos dos parâmetros do método. Essa união é conhecida como a assinatura do método

Exemplos:

Código Descrição
public void print();
public void print2();
Isso é permitido. Os dois métodos têm nomes exclusivos.
public void print();
public void print(int n);
E também isso. Os dois métodos têm nomes exclusivos (assinaturas).
public void print(int n, int n2);
public void print(int n);
Os métodos ainda são únicos
public int print(int a);
public void print(int n);
Mas isso não é permitido . Os métodos não são exclusivos . Mesmo que eles retornem tipos diferentes.
public int print(int a, long b);
public long print(long b, int a);
Mas você pode fazer isso . Os parâmetros do método são exclusivos

A assinatura inclui o nome do método e os tipos de parâmetro . Ele não inclui o tipo de retorno do método e os nomes dos parâmetros . Uma classe não pode ter dois métodos com as mesmas assinaturas — o compilador não saberá qual chamar.

Os nomes dos parâmetros não importam , pois eles se perdem durante a compilação. Depois que um método é compilado, apenas seu nome e tipos de parâmetro são conhecidos. O tipo de retorno não é perdido, mas o resultado do método não precisa ser atribuído a nada, portanto também não é incluído na assinatura.

De acordo com os princípios OOP , o polimorfismo está escondendo diferentes implementações atrás de uma única interface. Quando chamamos o System.out.println()método, por exemplo, diferentes métodos são chamados dependendo de quais argumentos são passados. Isso é polimorfismo em ação.

É por isso que diferentes métodos com nomes idênticos contidos na mesma classe são considerados uma forma fraca de polimorfismo.