Qual a diferença entre sobrecarga (overloading) e sobrescrita (overriding) de métodos?

A sobrecarga e a sobrescrita de métodos são conceitos fundamentais da programação orientada a objetos em Java, mas possuem diferenças importantes.

Qual a diferença entre sobrecarga (overloading) e sobrescrita (overriding) de métodos?

Em Java, tanto a sobrecarga (method overloading) quanto a sobrescrita (method overriding) permitem reutilizar métodos, mas possuem propósitos diferentes.

1. O que é sobrecarga de métodos?

A sobrecarga de métodos ocorre quando criamos múltiplos métodos com o mesmo nome dentro da mesma classe, desde que tenham assinaturas diferentes (quantidade ou tipo de parâmetros).

Exemplo de sobrecarga:

public class Calculadora {
    public int somar(int a, int b) {
        return a + b;
    }

    public double somar(double a, double b) {
        return a + b;
    }

    public int somar(int a, int b, int c) {
        return a + b + c;
    }
}

Aqui, temos três métodos somar(), cada um aceitando diferentes tipos e quantidades de parâmetros.

2. O que é sobrescrita de métodos?

A sobrescrita de métodos ocorre quando uma subclasse redefine um método da superclasse para alterar seu comportamento. A assinatura do método deve ser exatamente a mesma da classe pai.

Exemplo de sobrescrita:

class Animal {
    void fazerSom() {
        System.out.println("Som genérico de animal");
    }
}

class Cachorro extends Animal {
    @Override
    void fazerSom() {
        System.out.println("Latido");
    }
}

Aqui, Cachorro sobrescreve o método fazerSom() da classe Animal, alterando sua implementação.

3. Diferença entre sobrecarga e sobrescrita

Característica Sobrecarga (Overloading) Sobrescrita (Overriding)
Onde ocorre? Na mesma classe Entre classes (herança)
Assinatura do método Diferente (variação nos parâmetros) Igual à do método na superclasse
Retorno pode ser diferente? Sim Sim (desde que seja um subtipo do retorno original)
Uso de @Override Não é necessário Obrigatório para garantir a sobrescrita

4. Exemplo combinando sobrecarga e sobrescrita

class Animal {
    void fazerSom() {
        System.out.println("Som genérico de animal");
    }
}

class Cachorro extends Animal {
    @Override
    void fazerSom() {
        System.out.println("Latido");
    }

    void fazerSom(String intensidade) { // Sobrecarga
        System.out.println("Latido " + intensidade);
    }
}

Aqui, Cachorro sobrescreve fazerSom() da classe Animal e sobrecarrega fazerSom() para aceitar um parâmetro.

Conclusão

A sobrecarga permite criar várias versões de um método dentro da mesma classe, enquanto a sobrescrita redefine um método herdado de uma superclasse. Compreender essas diferenças é essencial para dominar a Programação Orientada a Objetos em Java.

A sobrecarga e a sobrescrita são fundamentais para criar código reutilizável e bem estruturado. Métodos sobrecarregados permitem flexibilidade ao lidar com diferentes tipos de entrada sem precisar criar novos nomes de métodos. Já a sobrescrita é essencial para a personalização de comportamento em subclasses. Bibliotecas Java, como ArrayList, utilizam a sobrescrita para redefinir métodos herdados de AbstractList, enquanto classes utilitárias como Math utilizam sobrecarga para permitir operações matemáticas com diferentes tipos numéricos.

Algumas aplicações:

  • Criação de métodos flexíveis que aceitam diferentes tipos de entrada
  • Implementação de polimorfismo em sistemas orientados a objetos
  • Personalização de métodos herdados em subclasses
  • Melhoria da legibilidade e reutilização do código

Dicas para quem está começando

  • Use sobrecarga quando precisar de múltiplas versões de um método com diferentes parâmetros
  • Utilize sobrescrita quando precisar alterar o comportamento de um método herdado
  • Sempre adicione @Override ao sobrescrever métodos para evitar erros
  • Evite sobrecarga excessiva para manter o código claro
  • Teste sempre os métodos sobrescritos para garantir que se comportam corretamente

Contribuições de Eduardo Martins

Compartilhe este tutorial: Qual a diferença entre sobrecarga overloading e sobrescrita overriding de métodos

Compartilhe este tutorial

Continue aprendendo:

Como funciona a sobrecarga overloading de métodos em Java

A sobrecarga de métodos em Java permite definir múltiplos métodos com o mesmo nome, mas com diferentes parâmetros.

Tutorial anterior

Como funciona a concatenação de strings em Java

A concatenação de strings em Java pode ser feita com operadores, métodos e classes especializadas para otimizar o desempenho.

Próximo tutorial