It is possible to write an entire API Specification without using multiple inheritance or even inheritance at all.
http://contractualj.com/
All classes are declared final. Concrete behaviour inheritance is not permitted.
It is even possible to avoid contract/interface inheritance, since these types in Java are static (implying some knowledge about the future as does any static inheritance). However, this has drawbacks as opposed to avoiding concrete behaviour inheritance where the cost/benefit is to an extreme (read: infinity) such that it should always be avoided.
Benefit > 0
Cost == 0
x/0 == infinity - for all x > 0
The "techniques" for doing so have been described in many ways over the years. I prefer something like "as accurate as possible, a specification of requirement for the software, conceding to the fact that one must fall infinitely short of a complete specification - implied by the tools at hand" - which contains an awful paradox within if you look close enough.