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.
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.
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.