public / private / protected Modificadores de acesso e readonly
Última atualização: 2026-10-22
public / private / protected Modificadores de acesso e readonly
Modificadores de acesso controlam a visibilidade dos membros: public (padrão, acessível em qualquer lugar), private (apenas na classe), protected (classe e subclasses). São restrições de tempo de compilação — erros de encapsulamento aparecem ao codificar, e não depois que dados em execução foram corrompidos.
| Grupo | Funções e Classes |
|---|---|
| Tipo | Sintaxe |
| Modo strict | Não necessário |
ℹ️ Info O editor transpila TypeScript para JavaScript e o executa (sem verificação de tipos); veja a Saída de cada exemplo para o resultado da verificação.
📝 Sintaxe
class BankAccount {
public owner: string; // public é o padrão; escrito para explicitar a intenção
private balance: number; // leitura/escrita apenas dentro da classe
constructor(owner: string, initial: number) {
this.owner = owner;
this.balance = initial;
}
deposit(amount: number): void { this.balance += amount; }
getBalance(): number { return this.balance; }
}
⚙️ Parâmetros
| public | O modificador padrão: acessível em qualquer lugar; escrevê-lo documenta a intenção |
|---|---|
| private | Acessível apenas dentro dos próprios métodos da classe; acesso externo e de subclasses são erros de compilação |
| protected | Disponível para a classe e suas subclasses, não para fora — um ponto de extensão controlado para subclasses |
Retorno:Os modificadores não mudam os tipos de retorno; apenas restringem quem pode chamar ou ler/escrever um membro.
▶ Exemplo
Edite o código abaixo e clique em Testar para ver o resultado transpilado:
Saída:
Mia: 150
(Saída de execução após a transpilação; atribuir acct.balance de fora gera um erro de compilação — só métodos internos à classe podem mexer nele)
💡 Observações
ℹ️ Info private/protected existem só em tempo de compilação: o campo continua no objeto após a transpilação (acct.balance funciona em execução). Para isolamento em execução, use o campo privado do JS #balance.
ℹ️ Info Instâncias da mesma classe podem acessar os membros privados umas das outras (por exemplo, ler other.balance dentro de equals(other: BankAccount)) — isso é por design.
⚠️ Atenção private evapora após a transpilação — nunca o trate como fronteira de segurança; ele protege contra uso indevido acidental, não contra acesso malicioso.
🏷️ Funções e Classes Relacionadas
💡 Casos relacionados
Mais casos em breve.
📚 Tutoriais relacionados
❓ Perguntas frequentes
P private vs o campo privado #?
R private é uma verificação do TS em tempo de compilação (contornável em execução); #field é privacidade no nível da linguagem (de verdade inacessível em execução). Prefira # em código novo; use private quando a integração profunda com o sistema de tipos do TS importar.
P Quando usar protected?
R Para pontos de extensão controlados: métodos de gancho em padrões template-method, estado interno que subclasses precisam ler. Mais apertado que public, mais solto que private.
P Acessores get/set ou campos públicos?
R Use get/set quando leituras/escritas precisarem de efeitos colaterais (validação, cache, valores derivados); armazenamento simples segue como campo público — não envolva cada campo em acessores.