• Defines a common interface for all classes that inherit from it
  • Cannot be instantiated or sealed - can contain both abstract and concrete members
  • Requires implementation by subclasses
  • Can have state
  • Pros
    • establish common pattern + enforce
    • avoid code redundancy by having common code in the base class
    • represents general concepts (like animal or shape)