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.

GrupoFunções e Classes
TipoSintaxe
Modo strictNã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

publicO modificador padrão: acessível em qualquer lugar; escrevê-lo documenta a intenção
privateAcessível apenas dentro dos próprios métodos da classe; acesso externo e de subclasses são erros de compilação
protectedDisponí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.
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.
Web-Tutorial.com

Equipe Técnica Web-Tutorial

Uma plataforma de tutoriais mantida por diversos desenvolvedores. Cada tutorial é escrito e revisado por profissionais da área correspondente. Trabalhamos para manter nosso conteúdo preciso e confiável — se encontrar algum problema, avise-nos.

100%