Path: csiph.com!newsfeed.hal-mli.net!feeder3.hal-mli.net!newsfeed.hal-mli.net!feeder1.hal-mli.net!npeer01.iad.highwinds-media.com!news.highwinds-media.com!feed-me.highwinds-media.com!nx02.iad01.newshosting.com!newshosting.com!news-out.readnews.com!transit3.readnews.com!news-out.news.tds.net!newsreading01.news.tds.net!53ab2750!not-for-mail From: "Lew" Subject: Re: multiple inheritance Message-ID: <502943B6.56771.calajapr@time.synchro.net> X-Comment-To: Arne Vajhøj Newsgroups: comp.lang.java.programmer In-Reply-To: <502943B5.56769.calajapr@time.synchro.net> References: <502943B5.56769.calajapr@time.synchro.net> X-FTN-AREA: COMP.LANG.JAVA.PROGRAMMER X-FTN-MSGID: 1:261/38 437e022a X-FTN-REPLY: 1:261/38 d2b4e9fa Content-Type: text/plain; charset=IBM437 Content-Transfer-Encoding: 8bit X-Gateway: time.synchro.net [Synchronet 3.16a-Win32 NewsLink 1.98] Lines: 57 Date: Mon, 13 Aug 2012 18:36:20 GMT NNTP-Posting-Host: 69.21.70.65 X-Complaints-To: news@tds.net X-Trace: newsreading01.news.tds.net 1344882980 69.21.70.65 (Mon, 13 Aug 2012 13:36:20 CDT) NNTP-Posting-Date: Mon, 13 Aug 2012 13:36:20 CDT Organization: tds.net X-Received-Bytes: 3166 Xref: csiph.com comp.lang.java.programmer:17823 To: Arne Vajhøj From: Lew Arne Vajh-,j wrote: > Roedy Green wrote: >> 1. It has interfaces which gives much of the ability at lighter >> weight.. > > Only for a very limited type of types (those with no implementation > at all). That is true, but "very limited" might be misconstrued as "not very useful". That Java limits multiple inheritance to interfaces is a design decision of the language, and confers advantages. These advantages come to the fore when one follows various recommended practices such as those found in Joshua Bloch's /Effective Java/. There are vanishingly few cases where one cannot mix in implementation through a combination of composition and single inheritance of implementation ('class' parent types) to accomplish with equal facility what multiple implementation inheritance would. Avoiding the sorts of downsides mentioned upthread is the motivation. There are many times one wishes to guarantee the presence of a contractual method that is required by several interfaces. 'java.lang.Runnable' need not be the only interface to specify 'void run();'. Let's say you have a custom 'Raceable' interface that also specifies 'void run();'. There's every reason to let an algorithm that expects a 'Raceable' to use some concrete type's 'run()' even if it also serves to keep 'Runnable''s promise. Multiple inheritance of promises is easier to understand and keep bug free. This ties into a programming approach I call "type-based programming". Given some concrete type public class FormulaOne implements Runnable, Raceable { @Override public void run() { ... } } client code can freely say: FormulaOne fone = new FormulaOne(); Raceable raceable = fone; Runnable runnable = fone; and so forth. Only signatures are shared, so implementation won't be confused. -- Lew Honi soit qui mal y pense. http://upload.wikimedia.org/wikipedia/commons/c/cf/Friz.jpg --- 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