A nice way to get around some of the complaints about Java lack of multiple inheritance and checked exceptions is to use Aspect oriented programming.
Using AspectJ (http://www.aspectj.org/) one can easily silence checked exception by wrapping them in Runtime exceptions. It also quite easy to provide common behaviour without multi-inheritance by writing an aspect that will be applied on a implemented interface.
There is a lot of other nice thing you can do with apsects such as adding authentication/authorization to existing code without any change to the existing code, providing consisten logging throughout the application, etc. It really worth checking out.