Mastering Object-Oriented Programming

Lesson 8: Abstract Classes and Interfaces: Designing Flexible Architectures