APIs are written by experts for non-experts
It is the class's responsibility to enforce its class invariants
Verify preconditions
Do not allow clients to do bad things.
The Iceberg Principle
Design for subclassing or prohibit it
Prefer classes to interfaces