Achieving inheritance and composition

When writing object-oriented code, we generally want to leverage inheritance and composition to reuse code, make relationships more flexible, and more efficiently model our data. In this section, we'll explore interfaces, abstract classes, and delegates and how they help us to implement the concepts of inheritance and composition.