Herança no Javascript: A Herança é um pilar da Programação Orientada a Objetos (POO), sendo o mecanismo que permite que uma nova classe (subclasse) absorva as propriedades e métodos de uma classe existente (superclasse). Isso promove o reuso de código e a criação de hierarquias lógicas.
Embora o JavaScript utilize a sintaxe de classes (class), seu motor de herança é baseado na Cadeia de Protótipos, onde objetos se ligam a outros objetos. A sintaxe de classes apenas simplifica essa complexidade.
1. O Conceito de Herança com Classes (ES6)
A herança é implementada em duas partes principais: a palavra-chave extends e a função super().
A. Palavra-Chave extends
Usada na declaração da subclasse para indicar qual classe está sendo estendida (herdada).
JavaScript
class Animal { /* ... */ }
// Cachorro herda de Animal
class Cachorro extends Animal {
/* ... */
}
B. A Palavra-Chave super
O super serve para duas funções cruciais dentro da subclasse:
- Chamada ao Construtor Pai (
super()): Dentro doconstructorda subclasse, deve-se chamarsuper()para inicializar a parte da instância que pertence à classe pai. - Acesso a Métodos do Pai (
super.metodo()): Permite chamar a versão do método definida na classe pai, mesmo que o método tenha sido sobrescrito na subclasse.
JavaScript
class Veiculo {
constructor(marca) {
this.marca = marca;
}
}
class Carro extends Veiculo {
constructor(marca, portas) {
super(marca); // 1. Inicializa this.marca
this.portas = portas; // Inicializa propriedade específica
}
}
2. Sobrescrita de Métodos (Method Overriding)
A sobrescrita ocorre quando a subclasse redefine um método que já existe na superclasse. Isso permite que objetos mais específicos (a subclasse) forneçam uma implementação única para um comportamento geral.
JavaScript
class Animal {
fazerSom() {
console.log("Som genérico de animal.");
}
}
class Gato extends Animal {
// Sobrescrita: Gato fornece sua própria implementação
fazerSom() {
console.log("Miau!");
}
apresentar() {
super.fazerSom(); // Acessa o método do pai
this.fazerSom(); // Chama o método sobrescrito
}
}
const gato = new Gato();
gato.apresentar(); // Saída: Som genérico de animal. Miau!
3. A Mecânica da Cadeia de Protótipos
A sintaxe de classes é apenas um invólucro para a herança baseada em protótipos.
- Quando você tenta acessar uma propriedade ou método em um objeto, o JavaScript primeiro verifica se ele existe no próprio objeto.
- Se não for encontrado, ele segue o link de protótipo para o objeto pai e repete a busca.
- Esse processo se repete ao longo de toda a Cadeia de Protótipos até que a propriedade seja encontrada ou até que o fim da cadeia (
null) seja atingido.
O comando extends em classes é o que estabelece corretamente esse link de protótipo entre a subclasse e a superclasse.
4. Limitações e Alternativas
- Sem Herança Múltipla Direta: JavaScript não suporta a herança de múltiplas classes de forma nativa (o chamado “problema do diamante”).
- Mixins: Para reutilizar código de várias fontes, a comunidade JS utiliza o padrão Mixins, que é um objeto contendo métodos que podem ser injetados em uma classe.
- Composição: Muitas vezes, em vez de usar herança, é preferível usar a Composição (“tem um”), onde a classe contém instâncias de outras classes para obter a funcionalidade desejada. Isso é frequentemente mais flexível que a Herança (“é um”).
✅ Conclusão Herança no Javascript
Herança no Javascript: A herança é um recurso poderoso para alcançar o reuso e a organização estrutural do código. Ao usar a sintaxe class com extends e super(), você implementa a Cadeia de Protótipos de forma clara. Dominar a herança é essencial para a criação de sistemas modulares, mas a consideração por alternativas como a Composição é crucial para evitar hierarquias excessivamente rígidas e complexas.
Toda jornada tem um início, e o início para se tornar um desenvolvedor web é dominar as seguintes tecnologias, que você encontra aqui mesmo:
E se você gosta do nosso conteúdo, não deixe de contribuir adquirindo os serviços e produtos dos nossos apoiadores e empresas que somos associados:












