Encapsulation
Marcar um field como private impede que código fora da class o toque diretamente — a class pode então garantir seus próprios invariantes, já que a única forma de mudar seu estado é através dos methods que ela escolhe expor, como deposit abaixo.
public class Main {
static class BankAccount {
private double balance;
BankAccount(double initial) {
balance = initial;
}
double getBalance() {
return balance;
}
void deposit(double amount) {
balance += amount;
}
}
public static void main(String[] args) {
BankAccount account = new BankAccount(100.0);
account.deposit(50.0);
System.out.println("Balance: " + account.getBalance());
}
}Balance: 150.0
balance nunca pode ser definido para um valor inválido de fora de BankAccount, porque nada fora da class pode alcançar o field diretamente — toda mudança tem que passar por deposit, que a class controla completamente.
A seguir: inheritance — extends, super, e fazer override de um method com @Override.
Practice exercise
Defina uma class Temperature com um private double celsius, um constructor que o fixe, e um method getFahrenheit() que retorne celsius * 9.0 / 5.0 + 32.0. Crie um Temperature com celsius 100.0 e imprima seu valor em Fahrenheit.