this is why I think encapsulation is the actual important part of object-oriented programming. inheritance and dynamic dispatch are, in limited applications, useful tools for sharing abstractions, but the sharing is not the point. that's another common misconception about abstraction that drives me up the wall.