11.12. Estrutura de Classes e Objetos em Java: Sobrecarga e Sobrescrita de Métodos

Java, sendo uma linguagem de programação orientada a objetos, oferece uma estrutura robusta para a definição de classes e objetos. Um conceito fundamental nesse contexto é o de métodos, que são essencialmente as ações que os objetos podem executar. A flexibilidade do uso de métodos é ampliada por dois conceitos importantes: sobrecarga (overloading) e sobrescrita (overriding) de métodos. Vamos explorar cada um desses conceitos em detalhes.

Sobrecarga de Métodos (Overloading)

A sobrecarga de métodos é um recurso que permite a um programador definir vários métodos com o mesmo nome dentro de uma classe, desde que eles tenham listas de parâmetros diferentes. A sobrecarga é útil quando você quer realizar a mesma operação de maneiras diferentes, dependendo dos argumentos passados para o método.


public class Calculadora {
    // Sobrecarga com dois parâmetros
    public int somar(int a, int b) {
        return a + b;
    }

    // Sobrecarga com três parâmetros
    public int somar(int a, int b, int c) {
        return a + b + c;
    }
}

No exemplo acima, a classe Calculadora tem dois métodos chamados somar. Um deles soma dois números, enquanto o outro soma três. O compilador Java distingue qual método chamar com base nos argumentos passados na chamada do método.

Sobrescrita de Métodos (Overriding)

A sobrescrita de métodos, por outro lado, ocorre quando uma subclasse redefine um método da superclasse. O método sobrescrito na subclasse deve ter a mesma assinatura, ou seja, o mesmo nome, tipo de retorno e parâmetros que o método na superclasse. A sobrescrita é usada para fornecer uma implementação específica de um método que já é fornecido por sua classe pai.


class Animal {
    public void emitirSom() {
        System.out.println("O animal faz um som");
    }
}

class Cachorro extends Animal {
    // Sobrescrita do método emitirSom
    @Override
    public void emitirSom() {
        System.out.println("O cachorro late");
    }
}

No exemplo acima, a classe Cachorro sobrescreve o método emitirSom da classe Animal. Quando um objeto da classe Cachorro chama emitirSom, a nova implementação é executada, e não a da classe Animal.

Regras para Sobrescrita de Métodos

Há algumas regras que precisam ser seguidas para sobrescrever um método corretamente:

  • O método na subclasse deve ter a mesma assinatura que o método na superclasse.
  • O método na subclasse deve ser pelo menos tão acessível quanto o método na superclasse.
  • O método na subclasse não pode lançar exceções verificadas mais amplas do que o método na superclasse.
  • Se o método na superclasse retorna um tipo, o método na subclasse deve retornar o mesmo tipo ou um subtipo (covariância).

Diferenças entre Sobrecarga e Sobrescrita

Embora ambos os conceitos permitam o uso de métodos com o mesmo nome, eles são usados em contextos diferentes e têm regras diferentes:

  • Sobrecarga ocorre dentro da mesma classe e é usada para métodos que realizam a mesma operação de maneiras diferentes, com diferentes parâmetros.
  • Sobrescrita ocorre entre uma superclasse e uma subclasse e é usada para fornecer uma implementação específica de um método que já existe na superclasse.

Palavra-chave super

Quando sobrescrevemos um método, às vezes queremos chamar a versão do método da superclasse antes de adicionar a funcionalidade específica da subclasse. Isso pode ser feito usando a palavra-chave super.


class Gato extends Animal {
    @Override
    public void emitirSom() {
        super.emitirSom(); // Chama o método da superclasse
        System.out.println("O gato mia");
    }
}

Neste exemplo, a classe Gato sobrescreve o método emitirSom, mas também chama a implementação do método da classe Animal antes de adicionar sua própria funcionalidade.

Conclusão

A compreensão da sobrecarga e sobrescrita de métodos é essencial para o uso efetivo da programação orientada a objetos em Java. Esses conceitos permitem que os programadores escrevam código mais flexível e reutilizável, facilitando a manutenção e a expansão de sistemas. Ao dominar a sobrecarga e a sobrescrita, você será capaz de criar classes que se comportam de maneira polimórfica, respondendo de forma diferente a mensagens comuns, o que é um princípio fundamental da orientação a objetos.

Agora responda o exercício sobre o conteúdo:

_Qual das seguintes afirmações sobre métodos em Java está correta?

Você acertou! Parabéns, agora siga para a próxima página

Você errou! Tente novamente.

Imagem do artigo Estrutura de classes e objetos em Java: Palavras-chave como this e super

Próxima página do Ebook Gratuito:

71Estrutura de classes e objetos em Java: Palavras-chave como this e super

5 minutos

Ganhe seu Certificado deste Curso Gratuitamente! ao baixar o aplicativo Cursa e ler o ebook por lá. Disponível na Google Play ou App Store!

Disponível no Google Play Disponível no App Store

+ de 6,5 milhões
de alunos

Certificado Gratuito e
Válido em todo o Brasil

48 mil exercícios
gratuitos

4,8/5 classificação
nas lojas de apps

Cursos gratuitos em
vídeo, áudio e texto