Junior
O que pode ser alterado ao sobrecarregar métodos na programação?
sobes.tech IA
Resposta da IA
Ao fazer overload de métodos (method overloading), pode-se alterar:
- Número de parâmetros: Métodos com o mesmo nome podem ter diferentes números de parâmetros formais.
- Tipos de parâmetros: Métodos com o mesmo nome e o mesmo número de parâmetros podem diferir nos tipos desses parâmetros.
- Ordem dos tipos de parâmetros: Se os métodos tiverem o mesmo número de parâmetros e os mesmos tipos, mas em ordens diferentes, isso também é considerado overload.
Exemplo em Java:
// Classe com métodos sobrecarregados
class Calculator {
// Método de soma de dois números inteiros
public int add(int a, int b) {
return a + b;
}
// Método sobrecarregado: soma de três números inteiros
public int add(int a, int b, int c) {
return a + b + c;
}
// Método sobrecarregado: soma de dois números de ponto flutuante
public double add(double a, double b) {
return a + b;
}
// Método sobrecarregado: soma de um inteiro e um número de ponto flutuante
public double add(int a, double b) {
return a + b;
}
// Método sobrecarregado: soma de um número de ponto flutuante e um inteiro
public double add(double a, int b) {
return a + b;
}
}
O que não pode ser alterado na sobrecarga de métodos:
- Tipo de valor de retorno: Dois métodos com o mesmo nome e a mesma assinatura (número, tipos e ordem dos parâmetros) não podem diferir apenas pelo tipo de valor de retorno.
- Modificadores de acesso: Modificadores de acesso (public, private, protected, default) não afetam a sobrecarga.
- Presença ou ausência da palavra-chave
static: Não é possível sobrecarregar um método estático definindo um método não estático com a mesma assinatura, ou vice-versa. - Lista de exceções lançadas pelo método: A lista de exceções não faz parte da assinatura do método, e o compilador não a usa para distinguir métodos sobrecarregados.
Comparação entre sobrecarga e sobrescrita de métodos:
| Característica | Sobrecarga (Overloading) | Sobrescrita (Overriding) |
|---|---|---|
| Onde ocorre | Em uma mesma classe ou em uma hierarquia de classes | Em uma classe filha |
| Nome do método | Igual | Igual |
| Assinatura do método | Diferente (número, tipos, ordem de parâmetros) | Igual |
| Tipo de retorno | Pode ser diferente (mas não a única diferença) | Deve ser igual ou covariante (para objetos) |
| Propósito | Fornecer várias opções para uma mesma ação com diferentes tipos de dados ou quantidade de argumentos | Alterar o comportamento de um método herdado na classe filha |
| Relação entre métodos | Métodos independentes | Relação de "é um" (herança) |
| Polimorfismo | Polimorfismo na fase de compilação (estático) | Polimorfismo na fase de execução (dinâmico) |