Path: csiph.com!v102.xanadu-bbs.net!xanadu-bbs.net!news.glorb.com!news-out.readnews.com!transit4.readnews.com!news-out.news.tds.net!newsreading01.news.tds.net!53ab2750!not-for-mail From: "Joshua Cranmer" Subject: Re: multiple inheritance Message-ID: <501C1562.56011.calajapr@time.synchro.net> X-Comment-To: bob smith Newsgroups: comp.lang.java.programmer In-Reply-To: <501C1561.56007.calajapr@time.synchro.net> References: <501C1561.56007.calajapr@time.synchro.net> X-FTN-AREA: COMP.LANG.JAVA.PROGRAMMER X-FTN-MSGID: 1:261/38 60d16056 X-FTN-REPLY: 1:261/38 78e34294 Content-Type: text/plain; charset=IBM437 Content-Transfer-Encoding: 8bit X-Gateway: time.synchro.net [Synchronet 3.16a-Win32 NewsLink 1.98] Lines: 46 Date: Fri, 03 Aug 2012 18:54:12 GMT NNTP-Posting-Host: 69.21.70.65 X-Complaints-To: news@tds.net X-Trace: newsreading01.news.tds.net 1344020052 69.21.70.65 (Fri, 03 Aug 2012 13:54:12 CDT) NNTP-Posting-Date: Fri, 03 Aug 2012 13:54:12 CDT Organization: tds.net Xref: csiph.com comp.lang.java.programmer:17052 To: bob smith From: "Joshua Cranmer" To: bob smith From: Joshua Cranmer 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 -+- BBBS/Li6 v4.10 Dada-1 + Origin: Prism bbs (1:261/38) -+- Synchronet 3.16a-Win32 NewsLink 1.98 Time Warp of the Future BBS - telnet://time.synchro.net:24 --- BBBS/Li6 v4.10 Dada-1 * Origin: Prism bbs (1:261/38) --- Synchronet 3.16a-Win32 NewsLink 1.98 Time Warp of the Future BBS - telnet://time.synchro.net:24