Na aula de hoje, vamos explorar a extensão de classes em TypeScript, uma característica fundamental da programação orientada a objetos. Através da palavra-chave extends, podemos criar novas classes com base em classes existentes, permitindo-nos estender funcionalidades já implementadas. Além disso, aprenderemos a utilizar a palavra-chave super para acessar métodos e propriedades da classe pai na classe filha. Então, bora começar!
Extensão de Classes
Vamos começar entendendo como estender uma classe existente para criar uma nova classe com funcionalidades adicionais.
class Animal {
nome: string;
constructor(nome: string) {
this.nome = nome;
}
fazerBarulho(): void {
console.log(`${this.nome} faz algum barulho.`);
}
}
class Cachorro extends Animal {
constructor(nome: string) {
super(nome); // Chamando o construtor da classe pai
}
fazerBarulho(): void {
console.log(`${this.nome} faz latidos.`);
}
}
Neste exemplo, temos uma classe base Animal com um construtor e um método fazerBarulho. A classe Cachorro estende a classe Animal usando a palavra-chave extends e chama o construtor da classe pai usando super. A classe filha também pode substituir o método fazerBarulho para fornecer uma implementação específica.
Acessando a Classe Pai com Super
A palavra-chave super é usada para acessar membros da classe pai a partir de uma classe filha. Isso é útil quando queremos estender o comportamento da classe pai.
class Pessoa {
nome: string;
constructor(nome: string) {
this.nome = nome;
}
saudacao(): string {
return `Olá, meu nome é ${this.nome}.`;
}
}
class Estudante extends Pessoa {
matricula: number;
constructor(nome: string, matricula: number) {
super(nome); // Chamando o construtor da classe pai
this.matricula = matricula;
}
saudacao(): string {
return `${super.saudacao()} Eu sou um estudante com a matrícula ${this.matricula}.`;
}
}
Neste exemplo, a classe Estudante estende a classe Pessoa. Dentro do método saudacao da classe Estudante, usamos super.saudacao() para chamar o método saudacao da classe pai e adicionar informações adicionais.
Vantagens da Extensão de Classes e Super
A extensão de classes e o uso de super fornecem os seguintes benefícios:
- Reutilização de código: Você pode estender funcionalidades existentes em vez de reescrevê-las.
- Manutenção simplificada: Alterações feitas na classe pai são automaticamente refletidas nas classes filhas.
- Polimorfismo: Você pode substituir métodos da classe pai para adaptá-los às necessidades da classe filha.
Exercícios
Exercício 1: Extensão de uma Classe Animal
Vamos começar estendendo a classe Animal. Crie uma classe chamada Gato que estenda a classe Animal. O Gato deve ter um construtor que aceite o nome do gato e, ao fazer barulho, exibirá “Miau” no console. Crie uma instância da classe Gato, chame o método fazerBarulho e verifique se ele exibe “Miau” no console.
Exercício 2: Acessando a Classe Pai com Super
Agora, crie uma classe chamada Aluno que estenda a classe Pessoa. A classe Aluno deve ter um construtor que aceite o nome do aluno e um número de matrícula. No método saudacao da classe Aluno, utilize a palavra-chave super para acessar a saudação da classe Pessoa e adicionar a informação da matrícula. Crie uma instância da classe Aluno, chame o método saudacao e verifique se ele exibe a saudação completa no console.
Exercício 3: Extensão e Polimorfismo
Crie uma classe base chamada Veiculo com um campo modelo: string e um método descrever que exibe “Este é um veículo modelo [modelo].” Em seguida, crie uma classe chamada Carro que estenda a classe Veiculo. No construtor da classe Carro, aceite o modelo do carro e chame o construtor da classe pai. Sobrescreva o método descrever na classe Carro para exibir “Este é um carro modelo [modelo].” Crie uma instância da classe Carro, chame o método descrever e verifique se ele exibe a descrição correta no console.
