How to inherit from multiple base classes in Java?

Viewed 47493
4 Answers

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.

Related