Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.java.programmer > #17048 > unrolled thread

multiple inheritance

Started by"bob smith" <bob.smith@1:261/38.remove-yy0-this>
First post2012-08-03 18:54 +0000
Last post2012-08-13 19:38 +0000
Articles 7 — 7 participants

Back to article view | Back to comp.lang.java.programmer


Contents

  multiple inheritance "bob smith" <bob.smith@1:261/38.remove-yy0-this> - 2012-08-03 18:54 +0000
    Re: multiple inheritance "markspace" <markspace@1:261/38.remove-yy0-this> - 2012-08-03 18:54 +0000
      Re: multiple inheritance "Gene Wirchenko" <gene.wirchenko@1:261/38.remove-yy0-this> - 2012-08-03 18:54 +0000
    Re: multiple inheritance "Eric Sosman" <eric.sosman@1:261/38.remove-yy0-this> - 2012-08-03 18:54 +0000
    Re: multiple inheritance "Joshua Cranmer" <joshua.cranmer@1:261/38.remove-yy0-this> - 2012-08-03 18:54 +0000
      Re: multiple inheritance "Lew" <lew@1:261/38.remove-yy0-this> - 2012-08-03 18:54 +0000
      Re: multiple inheritance "Arne Vajhøj" <������
høj@1:261/38.remove-odu-this> - 2012-08-13 19:38 +0000

#17048 — multiple inheritance

From"bob smith" <bob.smith@1:261/38.remove-yy0-this>
Date2012-08-03 18:54 +0000
Subjectmultiple inheritance
Message-ID<501C1561.56007.calajapr@time.synchro.net>
From: "bob smith" <bob.smith@1:261/38.remove-s5y-this>

From: bob smith <bob@coolfone.comze.com>

Why doesn't Java support multiple inheritance?

-+- 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

[toc] | [next] | [standalone]


#17049

From"markspace" <markspace@1:261/38.remove-yy0-this>
Date2012-08-03 18:54 +0000
Message-ID<501C1561.56008.calajapr@time.synchro.net>
In reply to#17048
  To: bob smith
From: "markspace" <markspace@1:261/38.remove-s5y-this>

  To: bob smith
From: markspace <-@.>

On 8/1/2012 7:28 PM, bob smith wrote:
> Why doesn't Java support multiple inheritance?
>

The diamond problem.  I'm not really up on the details however.

I can tell you from hanging out on the lambda-dev list (Java 8 features) that 
Brian Goetz has pushed back strongly on any sort of multiple inheritance. 
Apparently the diamond problem is a real bear and introduces real complexity 
into both the compiler and the user code that can cause big problems in the 
long run.

http://en.wikipedia.org/wiki/Diamond_problem

-+- 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

[toc] | [prev] | [next] | [standalone]


#17053

From"Gene Wirchenko" <gene.wirchenko@1:261/38.remove-yy0-this>
Date2012-08-03 18:54 +0000
Message-ID<501C1562.56012.calajapr@time.synchro.net>
In reply to#17049
  To: markspace
From: "Gene Wirchenko" <gene.wirchenko@1:261/38.remove-s5y-this>

  To: markspace
From: Gene Wirchenko <genew@ocis.net>

On Wed, 01 Aug 2012 20:07:58 -0700, markspace <-@.> wrote:

>On 8/1/2012 7:28 PM, bob smith wrote:
>> Why doesn't Java support multiple inheritance?

>The diamond problem.  I'm not really up on the details however.

     Such a lovely name.  The link does go into enough detail to
understand it.

>I can tell you from hanging out on the lambda-dev list (Java 8 features)
>that Brian Goetz has pushed back strongly on any sort of multiple
>inheritance.  Apparently the diamond problem is a real bear and
>introduces real complexity into both the compiler and the user code that
>can cause big problems in the long run.
>
>http://en.wikipedia.org/wiki/Diamond_problem

     It also has a number of different handlings in MI languages so
there is not an obvious solution.

Sincerely,

Gene Wirchenko

-+- 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

[toc] | [prev] | [next] | [standalone]


#17050

From"Eric Sosman" <eric.sosman@1:261/38.remove-yy0-this>
Date2012-08-03 18:54 +0000
Message-ID<501C1562.56009.calajapr@time.synchro.net>
In reply to#17048
  To: bob smith
From: "Eric Sosman" <eric.sosman@1:261/38.remove-s5y-this>

  To: bob smith
From: Eric Sosman <esosman@ieee-dot-org.invalid>

On 8/1/2012 10:28 PM, bob smith wrote:
> Why doesn't Java support multiple inheritance?

     To discourage formation of a Kennefeller dynasty?

     Because diamonds are a girl's best friend but a programmer's
biggest headache?

     The web is full of pages discussing the pros and cons of
Java's choice.  Perhaps you should read a few of them and then (if so moved) 
post "Excuse E for omitting multiple inheritance seems unconvincing to me for 
reasons R1 and R2, despite supporting arguments S1 through S9. Here's a 
concrete example where I think R1 and R2 trump S* and overturn E; what do 
others think?"

--
Eric Sosman
esosman@ieee-dot-org.invalid

-+- 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

[toc] | [prev] | [next] | [standalone]


#17052

From"Joshua Cranmer" <joshua.cranmer@1:261/38.remove-yy0-this>
Date2012-08-03 18:54 +0000
Message-ID<501C1562.56011.calajapr@time.synchro.net>
In reply to#17048
  To: bob smith
From: "Joshua Cranmer" <joshua.cranmer@1:261/38.remove-s5y-this>

  To: bob smith
From: Joshua Cranmer <Pidgeot18@verizon.invalid>

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

[toc] | [prev] | [next] | [standalone]


#17056

From"Lew" <lew@1:261/38.remove-yy0-this>
Date2012-08-03 18:54 +0000
Message-ID<501C1563.56015.calajapr@time.synchro.net>
In reply to#17052
  To: Joshua Cranmer
From: "Lew" <lew@1:261/38.remove-s5y-this>

  To: Joshua Cranmer
From: Lew <lewbloch@gmail.com>

Joshua Cranmer wrote:
> bob smith wrote:
>> Why doesn't Java support multiple inheritance?

Strictly speaking, Java does support multiple inheritance, just not from 
classes.

This is because multiple inheritance of implementation is silly.

> 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.

Quite so.

--
Lew

-+- 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

[toc] | [prev] | [next] | [standalone]


#17866

From"Arne Vajhøj" <������ høj@1:261/38.remove-odu-this>
Date2012-08-13 19:38 +0000
Message-ID<50294F05.56814.calajapr@time.synchro.net>
In reply to#17052
  To: Joshua Cranmer
From: "=?UTF-8?B?QXJuZSBWYWpow7hq?=" <=?utf-8?b?qxjuzsbwywpow7hq?=@1:261/38.rem
ove-nlb-this>

  To: Joshua Cranmer
From: =?UTF-8?B?QXJuZSBWYWpow7hq?= <arne@vajhoej.dk>

On 8/1/2012 11:41 PM, Joshua Cranmer wrote:
> 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.

It should be noted that Scala with its trait has come up with a solution that 
allows pulling in multiple traits with implementation code without the diamond 
problem.

Arne

-+- 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

[toc] | [prev] | [standalone]


Back to top | Article view | comp.lang.java.programmer


csiph-web