AULA 03
MÓDULO 1
encapsulamento
⏱ 50 min
Encapsulamento
Proteja os dados da sua classe. Modificadores de acesso: public, private, protected. Getters, setters com validação. A palavra this.
privatepublicprotectedgettersetterthisinvariante
O problema do acesso irrestrito
Imagine uma classe ContaBancaria com saldo public. Qualquer parte do código pode escrever conta.saldo = -1000000. Java compila, executa, sem avisos. O sistema está silenciosamente corrompido.
sem encapsulamento
Em C você já viu: variável global que qualquer função pode alterar. Depurar isso é um pesadelo — quem mudou? quando? como? Encapsulamento coloca um guardião na porta dos dados.Modificadores de acesso
Java usa 4 níveis de visibilidade que definem quem pode ver e modificar cada membro da classe.
| Modificador | Mesma classe | Mesmo pacote | Subclasse | Qualquer lugar |
|---|---|---|---|---|
| private | ✓ | ✗ | ✗ | ✗ |
| (default) | ✓ | ✓ | ✗ | ✗ |
| protected | ✓ | ✓ | ✓ | ✗ |
| public | ✓ | ✓ | ✓ | ✓ |
regra de ouro
Comece tudo private. Aumente a visibilidade só se precisar e tiver motivo. Menos acesso = menos lugar para erros aparecerem.Getters, setters e this
Getter retorna o valor. Setter define o valor com validação. this se refere ao próprio objeto — útil quando parâmetro tem mesmo nome do atributo.
IntelliJ gera automaticamente
Alt+Insert → Getter and Setter. Nunca escreva manualmente. Mas entenda o que foi gerado — a validação não é adicionada automaticamente!
java
// Encapsulamento em Java — proteger invariantes public class ContaBancaria { private double saldo; // private: só a classe acessa private final String titular; private static int contadorContas = 0; public ContaBancaria(String titular, double saldoInicial) { if (titular == null || titular.isBlank()) throw new IllegalArgumentException("Titular obrigatório"); if (saldoInicial < 0) throw new IllegalArgumentException("Saldo inicial não pode ser negativo"); this.titular = titular; // this: distingue atributo do parâmetro this.saldo = saldoInicial; contadorContas++; } // Getter — apenas leitura public double getSaldo() { return saldo; } public String getTitular() { return titular; } public static int getContadorContas() { return contadorContas; } // Métodos de negócio — operações válidas public void depositar(double valor) { if (valor <= 0) throw new IllegalArgumentException("Valor deve ser positivo"); saldo += valor; } public void sacar(double valor) { if (valor <= 0 || valor > saldo) throw new IllegalArgumentException("Saque inválido"); saldo -= valor; } }
quiz · aula 03
Teste seus conhecimentos em Java
0/3 respondidas
QUESTÃO 01
Por que tornar atributos private?
QUESTÃO 02
Qual o papel de 'this' no setter setNome(String nome)?
QUESTÃO 03
Qual modificador de acesso usar em atributos que subclasses precisam acessar diretamente?
0/3