Considere um exemplo de herança entre duas classes: a base classe Veiculo e a classe derivada Carro:
class Veiculo {
constructor() {
}
}
class Carro extends Veiculo {
constructor() {
super();
}
}
Os construtores foram definidos em branco para focarmos no assunto de construtores protegidos.
Considere as seguintes expressoes:
let umVeiculo: Veiculo;
umVeiculo = new Carro();
A variável umVeiculo
é declarada com tipo Veiculo
. Podemos atribuir um objeto do tipo Carro
à essa variàvel porque um Carro
é um Veiculo
.
Agora vamos ver outra expressão:
let veiculo: Veiculo = new Veiculo();
Nesse caso criamos um objeto usando a base classe Veiculo
. Mas há situações em que não queremos permitir a instanciação de objetos do tipo da base classe. Isto é, só queremos permitir a construção de instância de objetos cuja classe é Carro
, Moto
, etc.
A maneira de resolver o problema é através da palavra chave protected. Basta adicionar à esquerda da assinatura do constructor da base classe:
class Veiculo {
protected constructor() {
}
}
Agora, a seguinte expressão irá causar um erro:
let veiculo: Veiculo = new Veiculo();
Constructor of class 'Veiculo' is protected
and only accessible within the class declaration.
Com a adição de protected
antes da assinatura do constructor()
, não é mais possível criar objetos baseados diretamente na base classe Veiculo. Em vez disso, o usuário tem criar objetos a partir de classes derivadas de Veiculo
. No caso acima, temos que usar new Carro()
.
Para aprender mais sobre o TypeScript, assista às aulas do NBK Mundo Tech:
Nos vemos lá!