AnyCompiler

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());
    }
}
Output
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.