Menu
Coddy logo textTech

O método super()

Parte da seção Programação Orientada a Objetos do Journey de JavaScript da Coddy — lição 27 de 56.

O método super() cria e inicializa o objeto usando o construtor da classe pai. Ele deve ser chamado antes que você possa adicionar quaisquer propriedades à classe filha.

Pense desta forma: a classe pai constrói a base do objeto, e super() diz "construa essa base primeiro" antes que a classe filha adicione seus próprios recursos.

Vamos dar uma olhada no exemplo. Crie uma classe pai:

class Employee {
  constructor(name) {
    this.name = name;
  }
}

Agora crie uma classe filha que estende a classe pai:

class Manager extends Employee {
  constructor(name, department) {
    super(name); // Chama o construtor pai com name
    this.department = department;
  }
}

O que está acontecendo aqui:

  1. constructor(name, department) - Manager precisa tanto de name quanto de department
  2. super(name) - Passa name para o construtor de Employee
  1. this.department - Define a propriedade única do Manager

Isso cria um Manager que possui tanto propriedades herdadas (name) quanto suas próprias propriedades (department)!

Crie uma instância da classe filha:

const myManager = new Manager("Sarah", "Engineering");
console.log(myManager.name);      // "Sarah"
console.log(myManager.department); // "Engineering"

O método super() deve ser chamado antes de usar this no construtor de uma classe derivada. Se você não chamar super(), o JavaScript lançará um erro de referência.

challenge icon

Desafio

Dada uma classe Salad que estende Meal. A Salad deve ter tanto um name quanto ingredients.

Sua tarefa é completar o construtor da classe Salad ao:

  1. Chamar super() com a propriedade name
  2. Definir a propriedade ingredients

Folha de consulta

O método super() cria e inicializa o objeto usando o construtor da classe pai. Ele deve ser chamado antes que você possa adicionar qualquer propriedade à classe filha.

Exemplo de uso do super() em uma classe filha:

class Employee {
  constructor(name) {
    this.name = name;
  }
}

class Manager extends Employee {
  constructor(name, department) {
    super(name); // Chama o construtor pai primeiro
    this.department = department; // Então adiciona as propriedades da filha
  }
}

const myManager = new Manager("Sarah", "Engineering");
console.log(myManager.name);      // "Sarah"
console.log(myManager.department); // "Engineering"

Pontos principais:

  • super() deve ser chamado antes de usar this no construtor da classe filha
  • Passe os argumentos necessários da classe filha para o construtor da classe pai
  • O JavaScript lançará um erro de referência se o super() não for chamado

Experimente você mesmo

import { Meal } from './classes.js';
import { Salad } from './classes.js';

// Código de teste - não modifique
const salad = new Salad("Caesar", ["lettuce", "croutons", "cheese"]);
console.log(salad.name);       // Deve exibir "Caesar"
console.log(salad.ingredients); // Deve exibir ["lettuce", "croutons", "cheese"]
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Programação Orientada a Objetos