Como Usar protected para Acessar Membros Privados de uma Base Classe no TypeScript
Em programação orientada à objetos, os atributos de um objeto são normalmente definidos com acesso privado para não serem lidos ou modificados diretamente. Em vez do acesso direto a propriedade, funções getter e setter são definidas para disponibilizar uma API de leitura e modificação, respectivamente.
Por exemplo, suponha que temos uma classe que representa um veículo:
class Veiculo {
private marca: string;
constructor(aMarca: string) {
this.marca = aMarca;
}
obterMarca() {
return this.marca;
}
modificarMarca(novaMarca: string) {
this.marca = novaMarca;
}
}
Podemos criar um veículo da seguinte maneira:
let carro = new Veiculo("Honda");
Mas o acesso e modificação da marca do veículo após sua construção não é permitida:
console.log(carro.marca);
carro.marca = "Toyota";
O compilador mostra o seguinte erro para ambas as expressões:
Property 'marca' is private and only accessible within class 'Veiculo'.
Vamos agora criar uma classe derivadas de um Veiculo: Carro
. Veja o código abaixo:
class Carro extends Veiculo {
imprimirMarca() {
console.log(this.marca);
}
}
A classe Carro
herda o constructor
da base classe Veiculo
, então não precisamos defini-lo novamente.
O metodo imprimirMarca
vai dar erro porque this.marca
não é acessível da classe derivada, Carro
. A marca é uma propriedade da base classe Veiculo
, com acesso private
:
Property 'marca' is private and only accessible within class 'Veiculo'.
Para podermos ter acesso direto de uma propriedade da base classe na classe derivada, precisamos usar o modo de acesso protected:
class Veiculo {
protected marca: string;
// ...
}
Agora, a chamada de imprimirMarca
de um objeto da classe Carro
irá funcionar sem problemas. O acesso à propriedade marca
da superclasse Veiculo
é permitido.
Para aprender mais sobre o TypeScript, assista às aulas do NBK Mundo Tech:
Nos vemos lá!
Congratulations @nbkmundotech! You received a personal award!
You can view your badges on your Steem Board and compare to others on the Steem Ranking
Vote for @Steemitboard as a witness to get one more award and increased upvotes!