Velvet Star Monitor

Standout celebrity highlights with iconic style.

general

Can a normal Class implement multiple interfaces?

Writer Mia Lopez

I know that multiple inheritances between Interfaces is possible, e.g.:

public interface C extends A,B {...} //Where A, B and C are Interfaces

But is it possible to have a regular Class inherit from multiple Interfaces like this:

public class A implements C,D {...} //Where A is a Class and C and D are interfaces
4

8 Answers

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 {...}
3

public class A implements C,D {...} valid

this is the way to implement multiple inheritence in java

In a word - yes. Actually, many classes in the JDK implement multiple interfaces. E.g., ArrayList implements List, RandomAccess, Cloneable, and Serializable.

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.

Ceremonial example:

enter image description here

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"); }
}

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

Yes, it is possible. This is the catch: java does not support multiple inheritance, i.e. class cannot extend more than one class. However class can implement multiple interfaces.

An interface can extend other interfaces. Also an interface cannot implement any other interface. When it comes to a class, it can extend one other class and implement any number of interfaces.

class A extends B implements C,D{...}
1

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy