There are good reasons for that.
What your're asking about is called
multiple inheritance, see this:
http://en.wikipedia.org/wiki/Multiple_inheritance[
^].
What Albin says does not explain the problems of multiple inheritance. This paradigm is used in C++ and other languages, is very productive but quite hard to be used in OOD. To address the problem Albin tried to point out there are two different types of inheritance: in one the same name of the member is hidden in derived class, in another one it is virtual (
http://en.wikipedia.org/wiki/Virtual_inheritance[
^]).
One of the problems related to OOD and OO method is well-known
http://en.wikipedia.org/wiki/Diamond_problem[
^]. This is not the only problem. In general, OOD required good skills in prediction of the future of development, which is very difficult to master. With multiple inheritance, this is even more difficult. On reason for lack of flexibility is that the virtual (or non-virtual) inheritance is decided once it a certain point of inheritance graphs (which is no longer a tree) and cannot be changed later, that is, being virtually inherit cannot itself be a matter or late binding. Another problem is that the virtual (or non-virtual) inheritance is applied to whole base class, not to individual members.
All that makes multiple inheritance usage difficult. As a rule of thumb, it is very good for a finally sealed set of classes. If it is designed to provide abstract classes to be sub-classes by the user, it is always a problem; it's very hard to predict what the user may want.
In contrast, in Java and .NET only a
weak form of multiple inheritance is supported. A class should have strictly one base class (except Object, the base of all other classes), but any number of interfaces, and an interface can have any number of base interfaces.
—SA