An object owns its data, and outside code reaches that data only through methods the object controls. Fields stay private, and the class decides which changes are legal. The private keyword is the mechanism; the discipline is the point.
Hiding state buys three things. You enforce invariants in one place, so an account refuses a withdrawal that goes below zero and no caller can skip that check. You swap the internal representation, a list for a map, without touching callers. And when a balance is wrong, the suspect list is one class, not the whole codebase.
The cost is ceremony. Not every type needs a wall around it. A plain data holder passed between two functions gains nothing from private fields and pass-through accessors, and the extra layer just makes the code longer to read.
This answer doesn't lend itself to a diagram - it reads best . No credits were charged.
Why there's no diagram: “”
The interactive diagram is below the answer - jump to diagram ↓ · Below it, the related concept . Jump to it ↓
The diagram below the answer is the concept . Jump to it ↓