I know that multiple inheritances between Interfaces is possible, e.g.:
public interface C extends A,B {...} //Where A, B and C are Interfaces
In a word - yes.
Actually, many classes in the JDK implement multiple interfaces. E.g., ArrayList implements List, RandomAccess, Cloneable, and Serializable.
Of course... Almost all classes implements several interfaces. On any page of java documentation on Oracle you have a subsection named "All implemented interfaces".
Here an example of the Date class.
It is true that a java class can implement multiple interfaces at the same time, but there is a catch here. If in a class, you are trying to implement two java interfaces, which contains methods with same signature but diffrent return type, in that case you will get compilation error.
interface One
{
int m1();
}
interface Two
{
float m1();
}
public class MyClass implements One, Two{
int m1() {}
float m1() {}
public static void main(String... args) {
}
}
output :
prog.java:14: error: method m1() is already defined in class MyClass
public float m1() {}
^
prog.java:11: error: MyClass is not abstract and does not override abstract method m1() in Two
public class MyClass implements One, Two{
^
prog.java:13: error: m1() in MyClass cannot implement m1() in Two
public int m1() {}
^
return type int is not compatible with float
3 errors
public class A implements C,D {...} valid
this is the way to implement multiple inheritence in java
Yes, a class can implement multiple interfaces. Each interface provides contract for some sort of behavior. I am attaching a detailed class diagram and shell interfaces and classes.
public interface Mammal {
void move();
boolean possessIntelligence();
}
public interface Animal extends Mammal {
void liveInJungle();
}
public interface Human extends Mammal, TwoLeggedMammal, Omnivore, Hunter {
void liveInCivilization();
}
public interface Carnivore {
void eatMeat();
}
public interface Herbivore {
void eatPlant();
}
public interface Omnivore extends Carnivore, Herbivore {
void eatBothMeatAndPlant();
}
public interface FourLeggedMammal {
void moveWithFourLegs();
}
public interface TwoLeggedMammal {
void moveWithTwoLegs();
}
public interface Hunter {
void huntForFood();
}
public class Kangaroo implements Animal, Herbivore, TwoLeggedMammal {
@Override
public void liveInJungle() {
System.out.println("I live in Outback country");
}
@Override
public void move() {
moveWithTwoLegs();
}
@Override
public void moveWithTwoLegs() {
System.out.println("I like to jump");
}
@Override
public void eat() {
eatPlant();
}
@Override
public void eatPlant() {
System.out.println("I like this grass");
}
@Override
public boolean possessIntelligence() {
return false;
}
}
public class Lion implements Animal, FourLeggedMammal, Hunter, Carnivore {
@Override
public void liveInJungle() {
System.out.println("I am king of the jungle!");
}
@Override
public void move() {
moveWithFourLegs();
}
@Override
public void moveWithFourLegs() {
System.out.println("I like to run sometimes.");
}
@Override
public void eat() {
eatMeat();
}
@Override
public void eatMeat() {
System.out.println("I like deer meat");
}
@Override
public boolean possessIntelligence() {
return false;
}
@Override
public void huntForFood() {
System.out.println("My females hunt often");
}
}
public class Teacher implements Human {
@Override
public void liveInCivilization() {
System.out.println("I live in an apartment");
}
@Override
public void moveWithTwoLegs() {
System.out.println("I wear shoes and walk with two legs one in front of the other");
}
@Override
public void move() {
moveWithTwoLegs();
}
@Override
public boolean possessIntelligence() {
return true;
}
@Override
public void huntForFood() {
System.out.println("My ancestors used to but now I mostly rely on cattle");
}
@Override
public void eat() {
eatBothMeatAndPlant();
}
@Override
public void eatBothMeatAndPlant() {
eatPlant();
eatMeat();
}
@Override
public void eatMeat() {
System.out.println("I like this bacon");
}
@Override
public void eatPlant() {
System.out.println("I like this broccoli");
}
}
A Java class can only extend one parent class. Multiple inheritance (extends) is not allowed. Interfaces are not classes, however, and a class can implement more than one interface.
The parent interfaces are declared in a comma-separated list, after the implements keyword.
In conclusion, yes, it is possible to do:
public class A implements C,D {...}