A herança é um dos conceitos fundamentais da Programação Orientada a Objetos (POO) e permite que uma classe derive de outra, aproveitando e reutilizando seu código. Em Java, a herança é implementada com a palavra-chave extends
, que indica que uma classe está herdando atributos e métodos de outra classe. A classe que herda é chamada de subclasse ou classe filha, enquanto a classe de onde as propriedades e métodos são herdados é a superclasse ou classe pai.
Conceitos Básicos
- Superclasse (Classe Pai): É a classe que fornece métodos e atributos para outras classes herdarem.
- Subclasse (Classe Filha): É a classe que herda métodos e atributos de uma superclasse.
Quando uma classe herda de outra, ela obtém todos os métodos e atributos não privados da superclasse. Isso ajuda a reduzir a duplicação de código e promove a reutilização.
Sintaxe de Herança
A estrutura básica da herança em Java usa a palavra-chave extends
:
class Superclasse {
// Atributos e métodos da classe pai
}
class Subclasse extends Superclasse {
// Atributos e métodos da classe filha
}
Exemplo Prático de Herança
Vamos criar um exemplo com uma classe Animal
e uma subclasse Cachorro
, que herda os atributos e métodos de Animal
.
Passo 1: Criar a Superclasse Animal
class Animal {
String nome;
int idade;
public void comer() {
System.out.println(nome + " está comendo.");
}
}
Passo 2: Criar a Subclasse Cachorro
A subclasse Cachorro
herda nome
e idade
de Animal
, além do método comer
.
class Cachorro extends Animal {
public void latir() {
System.out.println(nome + " está latindo!");
}
}
Passo 3: Usando as Classes
Agora vamos criar uma instância da classe Cachorro
e chamar métodos herdados e específicos da subclasse.
public class TesteHeranca {
public static void main(String[] args) {
Cachorro cachorro = new Cachorro();
cachorro.nome = "Rex";
cachorro.idade = 3;
// Método herdado da classe Animal
cachorro.comer();
// Método específico da classe Cachorro
cachorro.latir();
}
}
Saída Esperada:
Rex está comendo.
Rex está latindo!
Importância da Herança
A herança permite:
- Reutilização de Código: A subclasse reutiliza atributos e métodos da superclasse, reduzindo a repetição.
- Hierarquia de Classes: Facilita a organização do código em uma estrutura hierárquica, tornando o código mais fácil de entender e gerenciar.
- Facilidade de Expansão: A subclasse pode ter novos atributos e métodos, adicionando funcionalidades específicas, sem modificar a superclasse.
Sobrescrita de Métodos
A sobrescrita (ou overriding) permite que a subclasse forneça uma implementação específica para um método que já está definido na superclasse. Isso é útil quando você quer que um método funcione de forma diferente em uma subclasse.
Exemplo de Sobrescrita de Método
No exemplo abaixo, vamos sobrescrever o método comer
na subclasse Cachorro
.
class Cachorro extends Animal {
@Override
public void comer() {
System.out.println(nome + " está comendo ração.");
}
public void latir() {
System.out.println(nome + " está latindo!");
}
}
Neste caso, ao chamar o método comer
na subclasse Cachorro
, ele exibirá "Rex está comendo ração."
em vez da mensagem da superclasse.
Conclusão
A herança é uma das técnicas mais poderosas na POO para promover a reutilização de código, a organização hierárquica e a especialização de classes. Ao dominar herança em Java, você pode criar sistemas mais flexíveis e organizados, além de economizar tempo e evitar a duplicação de código. A prática da herança, combinada com a sobrescrita de métodos, permite que suas classes evoluam para comportamentos específicos sem modificar o código da classe pai.