AULA 10 MÓDULO 3 polimorfismo ⏱ 45 min

Polimorfismo I: Sobrecarga

Polimorfismo de compilação: o compilador escolhe pela assinatura. Sobrecarga com varargs. Quando sobrecarregar vs quando usar nome diferente.

sobrecargaassinaturavarargscompile-timepolimorfismo estático

Polimorfismo de compilação — sobrecarga

Polimorfismo estático: o compilador decide qual versão do método chamar com base na assinatura. Mesmo nome, diferentes parâmetros.

🎓
você já viu isso
Em C, você usaria calcularAreaCirculo() e calcularAreaRetangulo(). Java permite calcularArea() com assinaturas diferentes — o compilador escolhe a versão certa em tempo de compilação.
ASSINATURA = nome + tipos dos parâmetros (retorno NÃO conta)
calcularArea(double raio)
circulo
calcularArea(double base, double altura)
retangulo
calcularArea(double a, double b, double c)
triangulo

Varargs — número variável de argumentos

tipo... nome permite passar 0 ou mais argumentos. Java cria um array internamente. Deve ser o último parâmetro do método.

⚠️
quando sobrecarregar
Sobrecarregue quando o mesmo conceito tem variações de entrada. NÃO sobrecarregue para criar métodos que fazem coisas diferentes.

Sobrecarga vs renomear

Se o resultado é o mesmo conceito com entrada diferente, sobrecarregue. Se é conceito diferente, use nome diferente.

java
// Sobrecarga — mesmo nome, assinaturas diferentes

public class Calculadora {

    // Compilador escolhe baseado nos parâmetros
    public static double calcularArea(double raio) {
        return Math.PI * raio * raio;
    }

    public static double calcularArea(double base, double altura) {
        return base * altura;
    }

    // Fórmula de Heron — área do triângulo
    public static double calcularArea(double a, double b, double c) {
        double s = (a + b + c) / 2;
        return Math.sqrt(s * (s-a) * (s-b) * (s-c));
    }

    // Varargs — qualquer quantidade de inteiros
    public static int somar(int... numeros) {
        int total = 0;
        for (int n : numeros) total += n;
        return total;
    }
}

// Compilador resolve automaticamente
Calculadora.calcularArea(5.0);           // circulo: 78.53
Calculadora.calcularArea(4.0, 6.0);    // retangulo: 24.0
Calculadora.calcularArea(3.0, 4.0, 5.0); // triangulo: 6.0
Calculadora.somar(1, 2, 3, 4, 5);     // varargs: 15
quiz · aula 10
Teste seus conhecimentos em Java
0/3 respondidas
QUESTÃO 01
O compilador resolve sobrecarga com base em...
QUESTÃO 02
Varargs double... numeros pode ser chamado com...
QUESTÃO 03
Por que NÃO sobrecarregar processar(Pedido) e processar(String json)?
0/3