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)?