Because I would like to generalize the solution across all of the modules that I call "system" modules. The group of modules make up an application or toolkit that I would like to be able to customize on a per client basis while maintaining the core code base. Therefore, also on a per client basis, I would like to be able to subclass any of the system's modules without rewriting them each time. This means that whatever I do to make Foo subclass-able, I need to also do to Bar.