开发者

How to inherit from multiple base classes in Java? [duplicate]

开发者 https://www.devze.com 2022-12-15 17:56 出处:网络
This question already has answers here: Closed 12 years ago. Possible Duplicates: Cheat single inheritance in Java !!
This question already has answers here: Closed 12 years ago.

Possible Duplicates:

Cheat single inheritance in Java !!

Why is Multiple Inheritance not allowed in Java or C#?

Multiple Inheritance in java.

I know that we can use interfaces to inherit from multiple classes but is it possible to inherit the state as w开发者_运维百科ell?

How can I inherit methods with definitions from 2 classes and have them in a third class in Java?


Multiple inheritance is not allowed in Java. Use delegates and interfaces instead

public interface AInterface {
        public void a();
}
public interface BInterface {
    public void b();
}

public class A implements AInterface {
    public void a() {}
}
public class B implements BInterface {
    public void b() {}
}

public class C implements AInterface, BInterface {
    private A a;
    private B b;

    public void a() {
        a.a();
    }
    public void b() {
        b.b();
    }
}

Since Java 8 it's possible to use Default Methods in Interfaces.


Short answer: You can't. Java only has multiple inheritance of interfaces.

Slightly longer answer: If you make sure the methods you care about are in interfaces, then you can have a class that implements the interfaces, and then delegates to instances of the "super classes":

interface Noisy {
  void makeNoise();
}


interface Vehicle {
  void go(int distance);
}

class Truck implements Vehicle {
  ...
}

class Siren implements Noisy {
  ...
}

class Ambulance extends Truck implements Noisy {
  private Siren siren = new Siren();

  public makeNoise() {
    siren.makeNoise();
  }

  ...
}


You can not, Java doesn't support multiple inheritance. What you could do is composition.


Java explicitly disallows multiple inheritance of implementation. You're left with using interfaces and composition to achieve similar results.

0

精彩评论

暂无评论...
验证码 换一张
取 消