Inheritance is a fundamentally flawed concept in type systems. It suffers from the fragile base class problem. Josh Bloch, writer of Effective Java, recommends using composition over inheritance. If you want inheritance so that you can selectively override event handlers, and fall back on default implementations... you want something that's broken, because that suffers from the fragile base class problem. You need a guarantee that the superclass you are overriding won't call your subclass methods in an unexpected way... in other words, you need implementation details. A better way is to explicitly call default handlers on the superclass.