Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Abstract classes and Multiple Inheritance

We can achieve the same functionality as interfaces by using abstract classes, So why java doesn't allow the following code?

abstract class Animals
{
    public abstract void run();
}

abstract class Animals1
{
    public abstract void run1();
}

class Dog extends Animals,Animals1
{
  public void run() {System.out.println("Run method");}
  public void run1() {System.out.println("Run1 method");}
}

I know that multiple inheritance can be achieved by using only interfaces but the above code does the same thing as the interfaces would have done it.

like image 746
Zephyr Avatar asked Mar 11 '23 19:03

Zephyr


1 Answers

This is not allowed because you can do more than this with abstract classes. It wouldn't make sense to allow multiple inheritance, provided you only used an abstract class when you could have used an interface.

It is simpler to only use abstract classes for things you can't do with an interface, in which case you wouldn't be able to use two abstract parent classes.

Note: with Java 8 there is less you can't do with an interface, you can have public instance and static methods with implementations.

In Java 9 you will be able to have private methods in interfaces ;)

like image 121
Peter Lawrey Avatar answered Mar 20 '23 21:03

Peter Lawrey