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.
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;
}
}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?