Herança no Javascript

Javascript
Tempo de leitura: 4 minutos

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:

  1. Chamada ao Construtor Pai (super()): Dentro do constructor da subclasse, deve-se chamar super() para inicializar a parte da instância que pertence à classe pai.
  2. 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:

HTML
HTML
CSS
CSS
Javascript
JavaScript

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:

Hospedagem Hostinger
Ofertas Amazon
Amazon Prime
Author: Thiago Rossi
Com mais de 20 anos de jornada na tecnologia, minha trajetória evoluiu do ensino técnico à arquitetura de sistemas complexos. Hoje, foco minha expertise no desenvolvimento de soluções de Inteligência Artificial nativa e análise de dados públicos, utilizando o ecossistema PHP para transformar dados brutos em transparência e eficiência. Como autor e desenvolvedor, acredito na democratização do conhecimento. Essa visão resultou em uma biblioteca de mais de 530 artigos gratuitos, cobrindo desde a base do WebDev e Infraestrutura até os bastidores da indústria de Jogos e IA. No universo de Game Design, sou autor do livro "GDD – O Guia Definitivo" e documento ativamente meus processos através de DevLogs, unindo rigor técnico e criatividade em projetos desenvolvidos com GDevelop 5. Meu compromisso é conectar engenharia de ponta com as reais oportunidades do mercado de tecnologia.