DevPath · Aprenda a programar ESPTEN

Programação orientada a objetos

Herança e encapsulamento

Herança: extends e super

Uma classe pode herdar de outra para reutilizar e especializar seu comportamento, usando extends:

class Animal {
  constructor(nome) {
    this.nome = nome;
  }
  descrever() {
    return `${this.nome} faz um som`;
  }
}

class Cachorro extends Animal {
  descrever() {
    return `${this.nome} late`;
  }
}

Se a subclasse tem seu próprio constructor, ela deve chamar super(...) para inicializar a parte herdada:

class Gato extends Animal {
  constructor(nome, cor) {
    super(nome);   // executa o constructor de Animal
    this.cor = cor;
  }
}

super.metodo() também permite chamar um método da classe pai.

Encapsulamento: campos privados

Por padrão, todas as propriedades são acessíveis de fora. Para dados que não devem ser tocados diretamente, use campos privados com #:

class ContaBancaria {
  #saldo = 0;
  depositar(quantia) {
    this.#saldo += quantia;
  }
  get saldo() {        // getter: lê-se como uma propriedade
    return this.#saldo;
  }
}
const c = new ContaBancaria();
c.depositar(100);
console.log(c.saldo); // 100  (c.#saldo daria um erro)

Getters e setters

Permitem executar lógica ao ler (get) ou atribuir (set) uma propriedade, mantendo uma sintaxe simples:

class Temperatura {
  #celsius = 0;
  get fahrenheit() {
    return this.#celsius * 9 / 5 + 32;
  }
  set fahrenheit(f) {
    this.#celsius = (f - 32) * 5 / 9;
  }
}

Exemplos

Herança com super e um getter

class Veiculo {
  constructor(marca) {
    this.marca = marca;
  }
  descrever() {
    return "Veículo " + this.marca;
  }
}
class Carro extends Veiculo {
  constructor(marca, portas) {
    super(marca);
    this.portas = portas;
  }
  descrever() {
    return super.descrever() + " com " + this.portas + " portas";
  }
}
console.log(new Carro("Seat", 5).descrever());
Coloque isto em prática

O DevPath é um curso prático: aqui você lê a teoria; no app você a coloca em prática com exercícios que rodam de verdade, offline.

Comece grátis no app →
← Classes, constructor e métodosthis dinâmico: bind, call e apply →