Java/Orientação a Objetos/Atributos: private, public, protected
Java⏱ ~2 min de leitura

Atributos: private, public, protected

Modificadores de acesso e visibilidade

Modificadores de acesso controlam quem pode ver e modificar cada atributo ou método de uma classe. São o fundamento do encapsulamento — um dos pilares da POO.

Existem quatro níveis em Java: public (acessível por qualquer classe em qualquer pacote), private (acessível apenas dentro da própria classe), protected (acessível na mesma classe, mesmo pacote e em subclasses de qualquer pacote), e package-private, o padrão quando nenhum modificador é declarado (acessível apenas dentro do mesmo pacote).

A boa prática é sempre começar com o nível mais restritivo possível — em geral private — e abrir o acesso apenas quando necessário. Isso protege o estado interno do objeto e permite alterar a implementação sem quebrar o código que usa a classe.

Exemplo.java
public class ContaBancaria {
    // private: somente a própria classe acessa
    private double saldo;
    private String numeroConta;

    // protected: a própria classe + subclasses + mesmo pacote
    protected String titular;

    // public: qualquer classe pode acessar
    public String agencia;

    // package-private (sem modificador): mesmo pacote
    String tipo; // "corrente" ou "poupança"

    public ContaBancaria(String titular, String numeroConta) {
        this.titular = titular;
        this.numeroConta = numeroConta;
        this.saldo = 0;
    }

    // Método público expõe o saldo de forma controlada
    public double getSaldo() {
        return saldo;
    }

    // Validação antes de alterar o estado
    public void depositar(double valor) {
        if (valor <= 0) throw new IllegalArgumentException("Valor inválido");
        saldo += valor;
    }

    public boolean sacar(double valor) {
        if (valor > saldo) return false;
        saldo -= valor;
        return true;
    }
}
💡 Dica pro

Regra de ouro: atributos sempre private. Exponha apenas o necessário via métodos públicos. Pense: se eu mudar a implementação interna, o código que usa esta classe vai quebrar?

Recompensa+25 XP+exercícios