Comment by [email protected]: Interfaces alone cannot enforce the common functional constraints that are required to make the plumbing work. It doesn't matter if the type name is Widget, BaseWidget, or BigRedDog, the only way (in Java) to make sure that any given widget is playing by the same rules is to put the required (and unbelievably arcane) behavior in a common base class. Anything less than a locked-down base implementation ultimately leads to degenerative replication of the required functionality.
For more information: http://code.google.com/p/google-web-toolkit/wiki/WhyWidgetIsAClass -- http://groups.google.com/group/Google-Web-Toolkit-Contributors
