Reach in from outside: account.balance = X. The field is private โ this is blocked.
โ through methods
Go through the front door. The method validates, then updates the shielded field.
console
โธThe left column bounces off the shield โ outside code can't touch a private field. The right column runs validation first, so the balance >= 0 invariant always holds.