A palavra-chave class
, introduzida no ECMAScript 2015, nos permite definir uma classe em JavaScript. O TypeScript também tem suporte ao paradigma. Um dos elementos da programação orientada à objetos é a herança de classes para reutilizar o código. No JavaScript tradicional, a herança é feita através de protótipos. Já com a palavra-chave class
, podemos fazer a herança através da palavra-chave extends
.
Vamos supor que temos uma base classe chamada Individuo
. Vamos simplificar o nosso exemplo e considerar mais duas classes: um individuo poderia ser um estudante ou um funcionário de uma empresa. Por causa disso, podemos usar herança e definir que:
Um Estudante é um Individuo
Um Funcionario é um Individuo
Então a base classe é Individuo
e as classes derivadas são Estudante
e Funcionario
. O primeiro é também chamado de superclasse e os segundos são subclasses.
Vamos aprender com um código. Primeiro definimos a base classe:
class Individuo {
nome: string;
constructor(oNome: string) {
this.nome = oNome;
}
}
Agora, para herdarmos da base classe, usamos a palavra-chave extends
logo após o nome dela. Depois segue com o nome da classe derivada:
class Estudante extends Individuo {
}
class Funcionario extends Individuo {
}
Não definimos nenhum membro para as classes derivadas, mas ambas irão herdar a propriedade nome
e o constructor
de Individuo
.
Podemos então adicionar propriedades e métodos específicos para cada subclasse. Por exemplo, um Estudante
tem uma disciplina
de estudo e um funcionário tem um salario
.
class Estudante extends Individuo {
disciplina: string;
constructor(oNome: string, aDisciplina: string) {
super(oNome);
this.disciplina = aDisciplina;
}
}
class Funcionario extends Individuo {
salario: number;
constructor(oNome: string, oSalario: number) {
super(oNome);
this.salario = oSalario;
}
}
No exemplo acima, precisamos adicionar um novo constructor
à cada classe derivada para poder iniciar as propriedades específicas de cada classe. Note que podemos reutilizar o código do constructor da base classe Individuo
com a chamada de super
.
É importante ressaltar que super
deve ser chamado para iniciar os valores compartilhados através da base classe e que não se deve referenciar this.
no corpo do constructor antes da chamada de super()
.
Vamos testar nossas classes:
let fJoao: Funcionario = new Funcionario("Joao", 123);
let eAna: Estudante = new Estudante("Ana", "Arquitetura");
Note que também podemos criar uma variável do tipo da base classe e ainda armazenar tanto um Estudante
como um Funcionario
:
let individuo: Individuo = fJoao;
individuo = eAna;
O código acima funciona porque um Funcionario
é um Individuo
e um Estudante
também é um Individuo
.
Para aprender mais sobre o TypeScript, assista às aulas do NBK Mundo Tech:
Nos vemos lá!