Médio Java
Sobrecarga de método para área
Enunciado
Crie uma classe CalculadoraArea com dois métodos sobrecarregados chamados area: um recebe um double lado e retorna a área do quadrado; outro recebe double base e double altura e retorna a área do retângulo. No main, calcule e imprima a área de um quadrado de lado 5 e de um retângulo de base 4 e altura 6.
Requisitos
- Deve existir sobrecarga: mesmo nome
area, parâmetros diferentes. - O método de um parâmetro calcula
lado * lado. - O método de dois parâmetros calcula
base * altura. - A saída deve mostrar
Quadrado: 25.0eRetângulo: 24.0.
Código inicial
public class CalculadoraArea {
// Implemente os métodos sobrecarregados area
public static void main(String[] args) {
// Chame os métodos e imprima
}
}
Saída esperada
Quadrado: 25.0
Retângulo: 24.0
Ver dica
A sobrecarga é resolvida pelo compilador com base na quantidade e tipos dos argumentos.
Mostrar solução
public class CalculadoraArea {
// Área do quadrado: um parâmetro
static double area(double lado) {
return lado * lado;
}
// Área do retângulo: dois parâmetros (sobrecarga)
static double area(double base, double altura) {
return base * altura;
}
public static void main(String[] args) {
double quadrado = area(5.0);
double retangulo = area(4.0, 6.0);
System.out.println("Quadrado: " + quadrado);
System.out.println("Retângulo: " + retangulo);
}
}
Passo a passo
- Declaramos a classe
CalculadoraArea. - O primeiro método
areatem um parâmetrodouble ladoe retornalado * lado. - O segundo método
areatem dois parâmetrosdouble baseedouble alturae retornabase * altura. - Como os nomes são iguais, mas as listas de parâmetros diferem, há sobrecarga.
- No
main, chamamosarea(5.0)— o compilador escolhe o método de um parâmetro. - Chamamos
area(4.0, 6.0)— o compilador escolhe o método de dois parâmetros. - Imprimimos os resultados com rótulos.
Por que funciona
A sobrecarga permite usar o mesmo nome para operações conceitualmente semelhantes. O compilador decide qual método chamar analisando a quantidade e os tipos dos argumentos. Isso torna o código mais legível e evita nomes como areaQuadrado e areaRetangulo.
Erros comuns
- Declarar dois métodos com mesma assinatura:
double area(double lado)edouble area(double x)— erro de compilação (método duplicado). - Esquecer de usar
doublenos literais:area(5)pode ser ambíguo se houver sobrecarga comint; aqui não há, mas é bom ser explícito. - Retornar
intem métododouble:return lado * lado;comladoint e retorno double funciona, mas se declararint area(double lado)perde precisão.
Outra forma de resolver
Usar apenas um método com parâmetros variáveis (varargs):
static double area(double... lados) {
if (lados.length == 1) return lados[0] * lados[0];
return lados[0] * lados[1];
}
Menos idiomático e menos seguro; prefira sobrecarga quando as operações são claras.
Saída esperada
Quadrado: 25.0
Retângulo: 24.0