Aula 3

JavaScript Intermediário

POO (parte 2 - Herança e Polimorfismo)

Introdução à Orientação a Objetos

Herança

A herança permite que uma classe reutilize propriedades e métodos de outra classe, promovendo a reutilização de código.


class Mammal extends Animal {
  constructor(name, species, isDomestic) {
    super(name, species);
    this.isDomestic = isDomestic;
  }

  mammalInfo() {
    return `${this.name} é um ${this.species} e é ${this.isDomestic ? 'domesticado' : 'selvagem'}.`;
  }
}

var cat = new Mammal('Mimi', 'gato', true);
console.log(cat.mammalInfo()); // Mimi é um gato e é domesticado.

        

Polimorfismo

O polimorfismo permite que métodos em classes filhas redefinam o comportamento dos métodos herdados da classe pai.


class Bird extends Animal {
  describe() {
    return `${this.name} é um pássaro da espécie ${this.species}.`;
  }
}

var parrot = new Bird('Loro', 'papagaio');
console.log(parrot.describe()); // Loro é um pássaro da espécie papagaio.

        

Exemplo Completo

Veja um sistema que gerencia veículos com classes especializadas para carros e motos.


class Vehicle {
  constructor(make, model, year) {
    this.make = make;
    this.model = model;
    this.year = year;
  }

  getDetails() {
    return `${this.year} ${this.make} ${this.model}`;
  }
}

class Car extends Vehicle {
  constructor(make, model, year, doors) {
    super(make, model, year);
    this.doors = doors;
  }

  getDetails() {
    return `${super.getDetails()} com ${this.doors} portas.`;
  }
}

class Motorcycle extends Vehicle {
  constructor(make, model, year, type) {
    super(make, model, year);
    this.type = type;
  }

  getDetails() {
    return `${super.getDetails()} que é uma moto do tipo ${this.type}.`;
  }
}

var myCar = new Car('Toyota', 'Corolla', 2022, 4);
var myBike = new Motorcycle('Honda', 'CBR', 2021, 'esportiva');

console.log(myCar.getDetails()); // 2022 Toyota Corolla com 4 portas.
console.log(myBike.getDetails()); // 2021 Honda CBR que é uma moto do tipo esportiva.