Abstraction
- Hide implementation details into a high level interface
Encapsulation
- Hide lower level details
- Expose an interface — a public part of an object
Inheritance
- Build new classes on top of existing ones
- Reuse code
- Extend a class and add functionalities
Polymorphism
- Objects that inherits another object can be classified as both
- Same interface with different implementation