Re: multiple inheritance
On 8/1/2012 10:28 PM, bob smith wrote:
Why doesn't Java support multiple inheritance?
Because multiple inheritance is really, really, really complicated and
confusing for most users.
The short answer is the diamond problem:
class A { int varA; };
class B : A { int varB; };
class C : A { int varC; };
class D : B, C { int varD; };
There are two main points of contention in this kind of hierarchy:
1. How many copies of varA should D have? Intuitively, one is probably
what most people would expect, but the implementations of B and C would
have to cooperate in realizing that their superclass may be shared with
D. It also incurs a penalty in runtime costs
2. How does initialization/override order get resolved? Is it "BFS"-y
(like D, B, C, A) or "DFS"-y (D, B, A, C)? There are even more
convoluted orders in practice (C3 appears to be the most common
nowadays), but this is the sort of stuff that tends to cause nasty sorts
of little edge cases in practice.
It is rare in practice that you need true multiple inheritance, in the
sense of inheritance of implementation; multiple inheritance of
interface is common, and this is as far as Java goes.
--
Beware of bugs in the above code; I have only proved it correct, not
tried it. -- Donald E. Knuth