Coming from a C++ background, I think can answer this question.
Suppose I have two classes A and B, both
of which contain an int instance variable named i. Now, suppose we have a class C which subclasses both. Naturally, C inherits both A::i and B::i. Having two distinct instance variables with the same name is asking for a lot of extra caution. Also imagine inheriting two methods (A::f() and B::f())with identical signatures but different implementations.
Of course it is possible to force the issue by explicitly invoking the class scope, like A::f(), but it limits the possibilities of polymorphism
Multiple implementation inheritance by itself is not necessarily bad; there are certainly pros and cons for it, in the same way that Java
has a convenient garbage collecting thread
while C++ objects on the heap must be manually accounted for. Go for convenience or go for user-configurable memory management? C++ is high-powered because of its many features, but along with it was the added complexity and margin for (sometimes spectacular) error. The fathers of Java felt it was too high a price to pay.
It just so happened that the fathers of Java felt that