Introdução
Modificadores de acesso controlam quem pode ler e escrever cada membro da classe.
| Modificador | Classe | Subclasse | Externo |
|---|---|---|---|
public |
✅ | ✅ | ✅ |
protected |
✅ | ✅ | ❌ |
private |
✅ | ❌ | ❌ |
readonly |
✅ leitura | ✅ leitura | ✅ leitura |
public — padrão
class Tenant {
public cnpj: string; // explícito
razaoSocial: string; // implicitamente public
constructor(cnpj: string, razaoSocial: string) {
this.cnpj = cnpj;
this.razaoSocial = razaoSocial;
}
}
private — só dentro da classe
class Certificado {
private senha: string;
private pfxBase64: string;
constructor(senha: string, pfxBase64: string) {
this.senha = senha;
this.pfxBase64 = pfxBase64;
}
assinar(xml: string): string {
// ✅ acesso interno permitido
return assinarComCertificado(xml, this.pfxBase64, this.senha);
}
}
const cert = new Certificado("1234", "...");
cert.senha; // ❌ erro — private
protected — classe e subclasses
class TransmissorBase {
protected url: string;
constructor(url: string) {
this.url = url;
}
protected logar(msg: string): void {
console.log(`[${this.url}] ${msg}`);
}
}
class TransmissorReinf extends TransmissorBase {
transmitir(payload: unknown) {
this.logar("transmitindo..."); // ✅ acesso em subclasse
this.url // também acessível ✅
}
}
const t = new TransmissorReinf("https://api.reinf.gov.br");
t.url; // ❌ erro — protected não é acessível externamente
readonly — só leitura após construção
class Protocolo {
readonly numero: string;
readonly emitidoEm: Date;
constructor(numero: string) {
this.numero = numero;
this.emitidoEm = new Date();
}
atualizar() {
this.numero = "novo"; // ❌ erro — readonly
}
}
Top comments (0)