Herança
A herança permite que uma classe reutilize propriedades e métodos
de outra classe. Em TypeScript, isso é feito com a palavra-chave
extends
, e adicionamos tipagem explícita nas propriedades e
nos parâmetros.
class Animal {
constructor(public name: string, public species: string) {}
describe(): string {
return `${this.name} é um ${this.species}.`;
}
}
class Mammal extends Animal {
constructor(name: string, species: string, public isDomestic: boolean) {
super(name, species);
}
mammalInfo(): string {
return `${this.name} é um ${this.species} e é ${this.isDomestic ? 'domesticado' : 'selvagem'}.`;
}
}
const 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. Em TypeScript, podemos
usar o modificador override
para deixar isso explícito.
class Bird extends Animal {
override describe(): string {
return `${this.name} é um pássaro da espécie ${this.species}.`;
}
}
const parrot = new Bird('Loro', 'papagaio');
console.log(parrot.describe()); // Loro é um pássaro da espécie papagaio.
Exemplo Completo - Sistema de Veículos
Veja abaixo um sistema que gerencia veículos com classes especializadas para carros e motos. Note o uso da tipagem estática nos atributos e métodos.
class Vehicle {
constructor(
public make: string,
public model: string,
public year: number
) {}
getDetails(): string {
return `${this.year} ${this.make} ${this.model}`;
}
}
class Car extends Vehicle {
constructor(make: string, model: string, year: number, public doors: number) {
super(make, model, year);
}
override getDetails(): string {
return `${super.getDetails()} com ${this.doors} portas.`;
}
}
class Motorcycle extends Vehicle {
constructor(make: string, model: string, year: number, public type: string) {
super(make, model, year);
}
override getDetails(): string {
return `${super.getDetails()} que é uma moto do tipo ${this.type}.`;
}
}
const myCar = new Car('Toyota', 'Corolla', 2022, 4);
const 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.