Herança com Classes: criando 'filhos' que herdam características
Aprenda como uma classe pode estender outra, reutilizando código e adicionando novas funcionalidades.
Na Programação Orientada a Objetos, herança é quando uma classe “filha” aproveita o que já existe em uma classe “mãe”.
Pense em família:
- classe mãe: regras e características gerais
- classe filha: herda essas regras e pode adicionar coisas próprias
Isso evita repetição e deixa o código mais organizado.
Ideia central da herança
Com herança, você reaproveita código.
Exemplo do mundo real:
- Classe mãe:
Animal(nome, comer, dormir) - Classe filha:
Cachorro(herda tudo deAnimale ainda late)
Sintaxe principal: extends
Em JavaScript (ES6), usamos extends para dizer que uma classe herda de outra.
class Animal {
constructor(nome) {
this.nome = nome;
}
comer() {
return `${this.nome} está comendo.`;
}
}
class Cachorro extends Animal {
latir() {
return `${this.nome} está latindo.`;
}
}
const rex = new Cachorro("Rex");
console.log(rex.comer()); // herdado de Animal
console.log(rex.latir()); // próprio de Cachorro
super(): conversando com a classe mãe
Quando a classe filha tem constructor, ela precisa chamar super(...) antes de usar this.
class Animal {
constructor(nome) {
this.nome = nome;
}
}
class Gato extends Animal {
constructor(nome, cor) {
super(nome); // chama o constructor da mãe
this.cor = cor;
}
}
Sem super(...), dá erro.
Sobrescrita de métodos (override)
A classe filha pode redefinir um método herdado para comportamento específico.
class Animal {
emitirSom() {
return "Som genérico";
}
}
class Gato extends Animal {
emitirSom() {
return "Miau!";
}
}
Isso é útil quando cada “filho” precisa agir de forma diferente.
Herança na prática: exemplo de sistema
class Usuario {
constructor(nome, email) {
this.nome = nome;
this.email = email;
}
resumo() {
return `${this.nome} - ${this.email}`;
}
}
class Admin extends Usuario {
constructor(nome, email, nivel) {
super(nome, email);
this.nivel = nivel;
}
resumo() {
return `${super.resumo()} | Nível: ${this.nivel}`;
}
excluirUsuario(usuarioNome) {
return `Admin ${this.nome} excluiu ${usuarioNome}`;
}
}
Adminherda deUsuario- reaproveita
nome,emaileresumo() - adiciona
niveleexcluirUsuario()
Boas práticas com herança
- Use herança quando houver relação real de “é um tipo de”.
- Evite hierarquias profundas demais (muitas camadas).
- Prefira nomes claros para classes mãe e filha.
- Se a relação não fizer sentido, talvez composição seja melhor.
Erros comuns de iniciantes
- Esquecer
extendsna classe filha. - Criar
constructorna filha e esquecersuper(...). - Usar herança só “porque sim”, sem relação lógica entre classes.
- Sobrescrever método sem necessidade.
Resumo da lição
- Herança permite que classes filhas reaproveitem código da classe mãe.
- Em JavaScript, usamos
extends. super(...)chama o construtor da classe mãe.- Você pode sobrescrever métodos para comportamentos específicos.
- Herança ajuda a reduzir repetição e melhorar organização.