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.0 e Retâ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

  1. Declaramos a classe CalculadoraArea.
  2. O primeiro método area tem um parâmetro double lado e retorna lado * lado.
  3. O segundo método area tem dois parâmetros double base e double altura e retorna base * altura.
  4. Como os nomes são iguais, mas as listas de parâmetros diferem, há sobrecarga.
  5. No main, chamamos area(5.0) — o compilador escolhe o método de um parâmetro.
  6. Chamamos area(4.0, 6.0) — o compilador escolhe o método de dois parâmetros.
  7. 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) e double area(double x) — erro de compilação (método duplicado).
  • Esquecer de usar double nos literais: area(5) pode ser ambíguo se houver sobrecarga com int; aqui não há, mas é bom ser explícito.
  • Retornar int em método double: return lado * lado; com lado int e retorno double funciona, mas se declarar int 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