13.3 Herança e Polimorfismo em Java: Sobrescrita de Métodos (Method Overriding)

A herança é um dos pilares fundamentais da Programação Orientada a Objetos (POO), permitindo a criação de novas classes com base em classes existentes. Em Java, isso é feito com a palavra-chave extends. A herança promove a reutilização de código e a criação de uma hierarquia de classes. Associada à herança, temos o conceito de polimorfismo, que, em sua forma mais simples, pode ser entendido como a capacidade de um objeto ser referenciado de várias formas.

O polimorfismo se manifesta de duas maneiras principais em Java: sobrecarga de métodos (method overloading) e sobrescrita de métodos (method overriding). Nesta seção, focaremos na sobrescrita de métodos, que é um mecanismo pelo qual uma subclasse oferece uma implementação específica de um método que já é fornecido por uma de suas superclasses.

Entendendo a Sobrescrita de Métodos

A sobrescrita de métodos ocorre quando uma subclasse em Java redefine um método da superclasse. Para que um método seja sobrescrito, ele deve ter a mesma assinatura na subclasse e na superclasse, ou seja, o mesmo nome e os mesmos parâmetros. A sobrescrita é uma ferramenta poderosa que permite que uma classe herde métodos de uma classe pai e ainda assim modifique seu comportamento conforme necessário.

Regras para Sobrescrita de Métodos

Existem algumas regras importantes que devem ser seguidas para sobrescrever um método corretamente em Java:

  • O método na subclasse deve ter o mesmo nome, tipo de retorno (ou subtipo) e parâmetros que o método na classe pai.
  • A visibilidade do método sobrescrito na subclasse não pode ser mais restritiva do que a visibilidade do método da classe pai.
  • O método sobrescrito não pode lançar exceções verificadas mais amplas do que as lançadas pelo método da classe pai.
  • Métodos marcados como final não podem ser sobrescritos.
  • Métodos estáticos não são sobrescritos, mas sim ocultados, o que é um conceito diferente.

Exemplo de Sobrescrita de Métodos

Vamos considerar um exemplo simples para ilustrar a sobrescrita de métodos:


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

class Cachorro extends Animal {
    @Override
    public void emitirSom() {
        System.out.println("O cachorro late: Au! Au!");
    }
}

No exemplo acima, a classe Cachorro sobrescreve o método emitirSom da classe Animal. Quando um objeto do tipo Cachorro chama o método emitirSom, a implementação sobrescrita é executada, fazendo com que seja impresso "O cachorro late: Au! Au!" em vez de "O animal emite um som.".

Uso da Anotação @Override

A anotação @Override é usada acima do método sobrescrito. Embora não seja obrigatória, é uma boa prática usá-la porque ela informa ao compilador que você pretende sobrescrever um método da superclasse. Se o método correspondente não for encontrado na superclasse, o compilador gera um erro, evitando possíveis erros de digitação ou assinatura de método.

Benefícios da Sobrescrita de Métodos

A sobrescrita de métodos permite que os desenvolvedores criem sistemas mais flexíveis e reutilizáveis. Ela oferece os seguintes benefícios:

  • Comportamento Específico: As subclasses podem definir um comportamento específico que é diferente do comportamento definido pela superclasse.
  • Polimorfismo: O mesmo método pode ter várias implementações diferentes, dependendo do objeto que está sendo referenciado.
  • Manutenção de Código Simplificada: Se um método da superclasse for modificado, apenas as sobrescritas que dependem da implementação original precisarão ser alteradas.

Considerações Finais

A sobrescrita de métodos é um recurso essencial na POO e em Java. Ela permite que os desenvolvedores criem classes mais especializadas que se comportam de maneira apropriada, mantendo a consistência e a reutilização de código. Ao entender e aplicar corretamente a sobrescrita de métodos, você pode criar sistemas robustos e facilmente extensíveis.

Por fim, é importante lembrar que a sobrescrita de métodos é apenas um aspecto do polimorfismo em Java. Outros aspectos, como a sobrecarga de métodos e a implementação de interfaces, também desempenham um papel crucial na criação de aplicações complexas e flexíveis. Com a prática e a compreensão desses conceitos, você estará bem equipado para aproveitar o poder da POO em seus projetos Java.

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

Qual das seguintes afirmações sobre a sobrescrita de 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 Herança e Polimorfismo em Java: Uso de 'super' para acessar membros da superclasse

Próxima página do Ebook Gratuito:

88Herança e Polimorfismo em Java: Uso de 'super' para acessar membros da superclasse

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