NOTE
Object-Oriented Programming in Java
Encapsulation, abstraction, inheritance, composition, and polymorphism with practical Java design guidance.
This is a historical learning note and may contain outdated or incomplete understanding.
Object-oriented design groups state and behavior behind abstractions.
- Encapsulation protects invariants behind an API.
- Abstraction exposes what callers need while hiding implementation choices.
- Polymorphism lets code depend on interfaces/contracts rather than concrete implementations.
- Inheritance can reuse/extend behavior but tightly couples subclasses to superclass design.
Prefer composition when the relationship is “has/use” rather than a true substitutable “is-a”. Good OOP is mainly about maintaining clear invariants and dependency boundaries, not maximizing the number of classes or inheritance levels.