O que é herança e como utilizá-la em Java?

Herança em Java permite que uma classe reutilize atributos e métodos de outra, promovendo reuso e organização do código.

O que é herança e como utilizá-la em Java?

A herança é um dos principais pilares da Programação Orientada a Objetos (POO) e permite que uma classe derive (herde) atributos e métodos de outra, promovendo reutilização de código e organização da estrutura do software.

1. Conceito de herança em Java

Em Java, utilizamos a palavra-chave extends para que uma classe herde os atributos e métodos de outra.

class Animal {
    String nome;

    void comer() {
        System.out.println(nome + " está comendo.");
    }
}

class Cachorro extends Animal {
    void latir() {
        System.out.println(nome + " está latindo!");
    }
}

2. Como funciona a herança?

Quando uma classe Cachorro estende Animal, ela herda automaticamente seus atributos (nome) e métodos (comer()), podendo também adicionar novos comportamentos (latir()).

public class TesteHeranca {
    public static void main(String[] args) {
        Cachorro dog = new Cachorro();
        dog.nome = "Rex";
        dog.comer(); // Método herdado da classe Animal
        dog.latir(); // Método da própria classe Cachorro
    }
}

Saída esperada:

Rex está comendo.
Rex está latindo!

3. Modificadores de acesso na herança

Nem todos os atributos e métodos são herdados diretamente. O modificador de acesso influencia a visibilidade:

  • public → Herdado e acessível em qualquer lugar.
  • protected → Herdado e acessível apenas dentro da mesma classe, subclasses e mesmo pacote.
  • private → Não é herdado diretamente, apenas acessível dentro da classe original.

4. Herança Múltipla em Java?

Java não suporta herança múltipla entre classes para evitar ambiguidades, mas permite que uma classe implemente múltiplas interfaces.

interface Nadador {
    void nadar();
}

class Peixe extends Animal implements Nadador {
    public void nadar() {
        System.out.println(nome + " está nadando!");
    }
}

5. Benefícios da herança

  • Reutilização de código, evitando duplicação.
  • Facilidade na manutenção, centralizando comportamentos comuns em superclasses.
  • Organização e hierarquia, representando relações naturais entre entidades do sistema.

Conclusão

A herança é um conceito poderoso que facilita a reutilização e estruturação do código, mas deve ser usada com cuidado para evitar hierarquias profundas que podem dificultar a manutenção. Em casos de necessidade de múltiplos comportamentos, interfaces podem ser uma alternativa mais flexível.

A herança é um dos conceitos mais utilizados na Programação Orientada a Objetos, mas seu uso excessivo pode gerar código difícil de manter. Muitas vezes, classes se tornam altamente acopladas, o que dificulta alterações futuras. Uma boa prática é usar herança apenas quando há uma relação clara de especialização entre classes (exemplo: Cachorro é um tipo de Animal). Quando a relação não for clara, o uso de composição pode ser uma abordagem melhor, permitindo maior flexibilidade no design do código. Frameworks como o Spring utilizam herança, mas sempre combinada com composição para garantir modularidade.

Algumas aplicações:

  • Criação de hierarquias de classes reutilizáveis
  • Modelagem de entidades do mundo real
  • Facilitação da manutenção do código
  • Uso em frameworks e bibliotecas para extender funcionalidades

Dicas para quem está começando

  • Use herança quando houver uma relação de especialização entre classes
  • Evite herança múltipla, pois Java não a suporta entre classes
  • Se um comportamento puder ser compartilhado sem herança, considere usar composição
  • Compreenda os modificadores de acesso (private, protected, public) para evitar problemas de visibilidade
  • Pratique criando pequenas hierarquias de classes para entender os benefícios da herança

Contribuições de Rodrigo Farias

Compartilhe este tutorial: O que é herança e como utilizá-la em Java

Compartilhe este tutorial

Continue aprendendo:

Quando usar uma classe abstrata e quando usar uma interface

Classes abstratas e interfaces em Java têm propósitos distintos e devem ser utilizadas de acordo com a necessidade de reutilização e implementação de contratos.

Tutorial anterior

Como funciona a palavra-chave super em Java

A palavra-chave super em Java é usada para acessar atributos, métodos e construtores da superclasse em uma relação de herança.

Próximo tutorial