Herança - TypeScript
Um dos aspectos fundamentais do paradigma orientado a objetos é a herança. No TypeScript, a herança é implementada por meio da palavra-chave extends
class Person {
name: string;
constructor(userName: string) {
this.name = userName;
}
print(): void {
console.log(`Nome: ${this.name}`);
}
}
class Employee extends Person {
company: string;
work(): void {
console.log(`${this.name} trabalha na empresa ${this.company}`);
}
}
let bob: Employee = new Employee("Bob");
bob.print();
bob.company = "Microsoft";
bob.work();
A classe Employee
Person
Person
Employee
Person
Person
let bob: Employee = new Employee("Bob");
bob.print();
bob.company = "Microsoft";
bob.work();
Sobrescrita do construtor
Se a subclasse define seu próprio construtor, ela deve chamar o construtor da classe base usando a palavra-chave super
class Person {
name: string;
constructor(userName: string) {
this.name = userName;
}
print(): void {
console.log(`Nome: ${this.name}`);
}
}
class Employee extends Person {
company: string;
constructor(name: string, company: string) {
super(name);
this.company = company;
}
work(): void {
console.log(`${this.name} trabalha na empresa ${this.company}`);
}
}
let bob: Employee = new Employee("Bob", "Microsoft");
bob.work(); // Bob trabalha na empresa Microsoft
Usando a palavra-chave super
Person
name
super(name)
Mesmo que a classe base não defina explicitamente nenhum construtor, na classe derivada, ao definir um construtor, ainda é necessário chamar o construtor da classe base. Nesse caso, será uma chamada ao construtor padrão usando super()
class Person {
name: string;
}
class Employee extends Person {
company: string;
constructor(name: string, company: string) {
super(); // chamada ao construtor da classe base
this.name = name;
this.company = company;
}
work(): void {
console.log(`${this.name} trabalha na empresa ${this.company}`);
}
}
let bob: Employee = new Employee("Bob", "Microsoft");
bob.work(); // Bob trabalha na empresa Microsoft
Sobrescrita de métodos
As classes derivadas também podem sobrescrever métodos das classes base:
class Person {
name: string;
constructor(name: string) {
this.name = name;
}
print(): void {
console.log(`Nome: ${this.name}`);
}
}
class Employee extends Person {
company: string;
constructor(name: string, company: string) {
super(name);
this.company = company;
}
print(): void {
console.log(`Nome: ${this.name}`);
console.log(`Trabalha na empresa: ${this.company}`);
}
}
let bob: Employee = new Employee("Bob", "Microsoft");
bob.print();
Neste caso, o método print()
print()
super
class Person {
name: string;
constructor(name: string) {
this.name = name;
}
print(): void {
console.log(`Nome: ${this.name}`);
}
}
class Employee extends Person {
company: string;
constructor(name: string, company: string) {
super(name);
this.company = company;
}
print(): void {
super.print();
console.log(`Trabalha na empresa: ${this.company}`);
}
}
let bob: Employee = new Employee("Bob", "Microsoft");
bob.print();