Whenever you're ready, walk me through how you'd approach this.
Tell me about the pillars of OOP.
Cover encapsulation, abstraction, inheritance, and polymorphism. Define each pillar, explain how they relate to one another, and give a concrete example in a language such as Java or Kotlin. Also mention when composition may be preferable to inheritance.