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