This article is from the Object-Oriented Technology FAQ, by Bob Hathaway firstname.lastname@example.org with numerous contributions by others.
Some people complain that inheritance is hierarchical (which is what most
object-oriented languages provide). They would also like to see more
operations available (set operations are quite common in specialized systems).
The former is a kind of language dependent feature commonly found in object-
oriented languages which are then associated with the term "inheritance"
(although they don't need to be. For example, delegation languages allow graph
inheritance stuctures). Some don't like the coupling of classes (as in Jade),
but in the author's opinion many of their complaints are easily answered. In
systems that provide inheritance, inheritance provides a simple and elegant way
to reuse code and to model the real world in a meaningful way.
Others complain multiple inheritance is too complicated because it brings up
the issues of shared bases and member conflict resolution. But most modern
systems support Multiple Inheritance by employing semantic resolution
strategies or renaming, and most consider MI to be highly desirable. See the
latter part of section 1.9 for an example of why MI is important.
Some prefer association to MI, claiming "roles" (as defined in [Rumbaugh 91])
should be associations and inheritance should be reserved for a single
hierarchy "creation" mechanism, however this loses polymorphism and loses the
use of inheritance for typical classification. Representation "roles" can be
supported by dynamic multiple inheritance (DMI) in many situations.