Vídeos novos: segunda, quarta e sexta · 8h

Modificadores de acesso em Java: public, private e protected

Quem enxerga o quê no seu código — e como isso protege as suas classes.

Os modificadores de acesso controlam de onde uma classe, um atributo ou um método pode ser usado. Eles são a ferramenta principal do encapsulamento, um dos pilares da Orientação a Objetos.

Os quatro níveis

ModificadorMesma classeMesmo pacoteSubclasse (outro pacote)Qualquer lugar
public✔✔✔✔
protected✔✔✔—
(sem modificador)✔✔——
private✔———

Quando você não escreve nada, o acesso é o default (também chamado package-private): visível só dentro do mesmo pacote.

Na prática: encapsulamento

Veja uma conta bancária com o saldo público:

public class Conta { public double saldo; } conta.saldo = -5000; // nada impede!

Tornando o atributo private, a única forma de mexer no saldo passa a ser pelos métodos — que aplicam as regras:

public class Conta { private double saldo; public void depositar(double valor) { if (valor <= 0) throw new IllegalArgumentException("Valor inválido"); saldo += valor; } public void sacar(double valor) { if (valor > saldo) throw new IllegalStateException("Saldo insuficiente"); saldo -= valor; } public double getSaldo() { return saldo; } }

Quando usar protected

Use protected quando uma subclasse precisa reaproveitar ou especializar um comportamento da classe mãe, mas esse comportamento não deve ficar aberto a todo mundo:

public abstract class Relatorio { public final String gerar() { return cabecalho() + corpo(); } protected String cabecalho() { return "Manual da Programação\n"; } protected abstract String corpo(); }

Regra de ouro

  • Comece sempre pelo mais restrito (private) e só abra quando houver motivo.
  • Atributos quase sempre private; exponha comportamento, não dados.
  • Nem todo atributo precisa de getter e setter. Um setSaldo público jogaria fora todo o encapsulamento acima.