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