4 Pillars:
- Encapsulation ⇒ encapsulating functions and variable having same objective into a single unit (often function or object)
- Abstraction ⇒ Showing only relevant data / functions and hiding implementations (like private and public functions and data)
- Inheritance ⇒ eliminate redundant code by reusing code (creating a prototype)
- Polymorphism ⇒ using same symbol to represent multiple functionalities
class ⇒ user defined datatypes private, protected, public ⇒ access modifiers
dynamic dispatch ⇒ runtime, heap allocation static dispatch ⇒ compile time, stack allocation, not in the same stack frame as local variables