Phil Tomson wrote: > then if I, or a user of these > classes decide that they want a different kind of runnable object that > performs a differnt function when 'run' is called, all they > have to do is define another class of their own and make sure it's objects > respond to 'run'. This is somehow disturbing to me. "Run" is kind of ambiguous, and might behave differently for different objects, whereas the caller of the method expects "run" to behave in a certain way, shouldn't a compiler/interpreter make sure that it *does* behave that way (ie check the contract)?