Como Usar protected para Acessar Membros Privados de uma Base Classe no TypeScript

in #typescript5 years ago

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á!

Sort:  

Congratulations @nbkmundotech! You received a personal award!

Happy Birthday! - You are on the Steem blockchain for 1 year!

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!

Coin Marketplace

STEEM 0.25
TRX 0.20
JST 0.035
BTC 95284.46
ETH 3462.33
USDT 1.00
SBD 3.49