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


Groups > comp.lang.java.programmer > #24688

Re: multiple inheritance in Java

Date 2013-07-06 22:19 -0400
From Arne Vajhøj <arne@vajhoej.dk>
Newsgroups comp.lang.java.programmer
Subject Re: multiple inheritance in Java
References (1 earlier) <kqtbe7$mth$1@dont-email.me> <multiple-inheritence-20130702041514@ram.dialup.fu-berlin.de> <61a00488-56ab-4452-bb3c-74e79d1a7d81@googlegroups.com> <6h8daa-4g3.ln1@s.simpson148.btinternet.com> <hYadnW-CWvwPj0nMnZ2dnUVZ8uSdnZ2d@bt.com>
Message-ID <51d8d053$0$298$14726298@news.sunsite.dk> (permalink)
Organization SunSITE.dk - Supporting Open source

Show all headers | View raw


On 7/3/2013 8:01 AM, lipska the kat wrote:
> On 03/07/13 10:46, Steven Simpson wrote:
>> On 02/07/13 19:53, Lew wrote:
>>> WIth Java 8 don't we get default methods? You can multiply-inherit
>>> interfaces.
>>
>> I don't see how default methods help here.  You might define Position as
>> an interface:
>>
>>    interface Position {
>>      int getX();
>>      int getY();
>>      void setX(int x);
>>      void setY(int y);
>>    }
>>
>> ...but what default implementations can you give any of these methods
>> without adding some state to Position?
>
> This is an interesting question
> It is possible to add state to an interface so that it is *almost* a class
>
> The following compiles and runs on 64 bit Ubuntu Linux with
>
> java version "1.8.0-ea"
> Java(TM) SE Runtime Environment (build 1.8.0-ea-b96)
> Java HotSpot(TM) 64-Bit Server VM (build 25.0-b38, mixed mode)
>
> javac 1.8.0-ea
>
> I haven't figured out all the mechanics or ramifications of this yet but
> it certainly looks like it is effectively possible to implement a form
> of multiple inheritance in Java. Not exactly an edifying prospect.
>
> =============================================================
>
> /* public instance variables for brevity */
> class State{
>      public Integer a = 0;
>      public Integer b = 0;
> }
>
> interface Foo{
>
>     /* explicitly static and final */
>     Integer i = 0;
>     State state = new State(); /* final reference, mutable instance */
>
>     default public void doFoo(Integer x){
>         //i = 10; /* illegal */
>         Integer y = x + i;
>         state.a = y + y;
>         System.out.println("doingFoo, i + x is " + y);
>         System.out.println("doingFoo, accessing state state.a is " +
> state.a);
>     }
> }
>
> interface Bar{
>
>     Integer i = 0;
>     State state = new State();
>
>     default public void doBar(Integer x){
>         Integer y = x + i;
>         state.a = y + y;
>         System.out.println("doingBar, i + x is " + y);
>         System.out.println("doingBar, accessing state state.a is " +
> state.a);
>     }
> }
>
> /* who owns the state? */
> class FooBarImpl implements Foo, Bar{
> }
>
> public class Test{
>      public static void main(String[] args){
>          FooBarImpl fbi = new FooBarImpl();
>          fbi.doFoo(5);
>      fbi.doBar(10);
>      }
> }

Foo own its state and Bar own its state and FooBarImpl
owns nothing.

Slightly different example:

public class StateTest {
     public static void main(String[] args) {
         System.out.println(Foo.state);
         System.out.println(Bar.state);
         FooBarImpl o = new FooBarImpl();
         o.doFoo();
         o.doBar();
     }
}

interface Foo {
     int state = 123;
     public default void doFoo() {
         System.out.println(Foo.state);
         System.out.println(Bar.state);
         System.out.println(state);
     }
}

interface Bar {
     int state = 456;
     public default void doBar() {
         System.out.println(Foo.state);
         System.out.println(Bar.state);
         System.out.println(state);
     }
}

class FooBarImpl implements Foo, Bar {
     public void m() {
         System.out.println(Foo.state);
         System.out.println(Bar.state);
         // does not compile because state is ambiguous:
         //System.out.println(state);
     }
}

Arne


Back to comp.lang.java.programmer | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

Re: multiple inheritance in Java Eric Sosman <esosman@comcast-dot-net.invalid> - 2013-07-01 21:52 -0400
  Re: multiple inheritance in Java Eric Sosman <esosman@comcast-dot-net.invalid> - 2013-07-02 00:09 -0400
    Re: multiple inheritance in Java Eric Sosman <esosman@comcast-dot-net.invalid> - 2013-07-02 08:13 -0400
      Re: multiple inheritance in Java Arne Vajhøj <arne@vajhoej.dk> - 2013-07-04 17:33 -0400
        Re: multiple inheritance in Java Sebastian <news@seyweiler.dyndns.org> - 2013-07-05 08:04 +0200
    Re: multiple inheritance in Java Jeff Higgins <jeff@invalid.invalid> - 2013-07-02 13:17 -0400
      Re: multiple inheritance in Java Eric Sosman <esosman@comcast-dot-net.invalid> - 2013-07-02 13:40 -0400
        Re: multiple inheritance in Java Jeff Higgins <jeff@invalid.invalid> - 2013-07-02 14:29 -0400
          Re: multiple inheritance in Java Jeff Higgins <jeff@invalid.invalid> - 2013-07-02 15:12 -0400
            Re: multiple inheritance in Java Arne Vajhøj <arne@vajhoej.dk> - 2013-07-04 17:23 -0400
              Re: multiple inheritance in Java Arne Vajhøj <arne@vajhoej.dk> - 2013-07-04 17:25 -0400
          Re: multiple inheritance in Java Eric Sosman <esosman@comcast-dot-net.invalid> - 2013-07-02 15:44 -0400
            Re: multiple inheritance in Java Jeff Higgins <jeff@invalid.invalid> - 2013-07-02 16:28 -0400
              Re: multiple inheritance in Java Jeff Higgins <jeff@invalid.invalid> - 2013-07-02 16:44 -0400
              Re: multiple inheritance in Java Eric Sosman <esosman@comcast-dot-net.invalid> - 2013-07-02 17:13 -0400
                Re: multiple inheritance in Java Jeff Higgins <jeff@invalid.invalid> - 2013-07-02 22:12 -0400
  Re: multiple inheritance in Java Lew <lewbloch@gmail.com> - 2013-07-02 11:53 -0700
    Re: multiple inheritance in Java Steven Simpson <ss@domain.invalid> - 2013-07-03 10:46 +0100
      Re: multiple inheritance in Java lipska the kat <"nospam at neversurrender dot co dot uk"> - 2013-07-03 13:01 +0100
        Re: multiple inheritance in Java Steven Simpson <ss@domain.invalid> - 2013-07-03 14:12 +0100
          Re: multiple inheritance in Java lipska the kat <"nospam at neversurrender dot co dot uk"> - 2013-07-03 14:49 +0100
        Re: multiple inheritance in Java Arne Vajhøj <arne@vajhoej.dk> - 2013-07-06 22:19 -0400
  Re: multiple inheritance in Java Arne Vajhøj <arne@vajhoej.dk> - 2013-07-04 17:36 -0400
    Re: multiple inheritance in Java Gene Wirchenko <genew@telus.net> - 2013-07-05 11:01 -0700

csiph-web