AnyCompiler

Encapsulation

Marcar un field como private evita que código fuera de la class lo toque directamente — la class puede entonces garantizar sus propios invariantes, ya que la única forma de cambiar su estado es a través de los methods que decide exponer, como deposit abajo.

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 puede fijarse a un valor inválido desde fuera de BankAccount, porque nada fuera de la class puede acceder al field directamente — cada cambio tiene que pasar por deposit, que la class controla por completo.

Siguiente: inheritance — extends, super, y hacer override de un method con @Override.

Practice exercise

Define una class Temperature con un private double celsius, un constructor que lo fije, y un method getFahrenheit() que devuelva celsius * 9.0 / 5.0 + 32.0. Crea un Temperature con celsius 100.0 e imprime su valor en Fahrenheit.