You should make this into an interface, then provide an abstract version of it, like Function and Event (AbstractFunction and AbstractEvent). This allows for a subclass to do mixin type techniques, which would be impossible to do if it could only extend from a concrete class.