Can an interface extend multiple interfaces in Java?

JavaInheritanceMultiple InheritanceExtends

Java Problem Overview


Can an interface extend multiple interfaces in Java? This code appears valid in my IDE and it does compile:

interface Foo extends Runnable, Set, Comparator<String> { }

but I had heard that multiple inheritance was not allowed in Java. Why does there appear to be an exception for interfaces?

Java Solutions


Solution 1 - Java

Yes, you can do it. An interface can extend multiple interfaces, as shown here:

interface Maininterface extends inter1, inter2, inter3 {  
  // methods
}

A single class can also implement multiple interfaces. What if two interfaces have a method defining the same name and signature?

There is a tricky point:

interface A {
    void test();
}

interface B {
    void test();
}

class C implements A, B {

	@Override
	public void test() {
		    		
	}     
    
}

Then single implementation works for both :).

Read my complete post here:

http://codeinventions.blogspot.com/2014/07/can-interface-extend-multiple.html

Solution 2 - Java

An interface can extend multiple interfaces.

A class can implement multiple interfaces.

However, a class can only extend a single class.

Careful how you use the words extends and implements when talking about interface and class.

Solution 3 - Java

From the Oracle documentation page about multiple inheritance type,we can find the accurate answer here. Here we should first know the type of multiple inheritance in java:-

  1. Multiple inheritance of state.
  2. Multiple inheritance of implementation.
  3. Multiple inheritance of type.

Java "doesn't support the multiple inheritance of state, but it support multiple inheritance of implementation with default methods since java 8 release and multiple inheritance of type with interfaces.

Then here the question arises for "diamond problem" and how Java deal with that:-

  1. In case of multiple inheritance of implementation java compiler gives compilation error and asks the user to fix it by specifying the interface name. Example here:-
                interface A {
                    void method();
                }
                
                interface B extends A {
                    @Override
                    default void method() {
                        System.out.println("B");
                    }
                }
                
                interface C extends A { 
                    @Override
                    default void method() {
                        System.out.println("C");
                    }
                }
                
                interface D extends B, C {
                
                }

So here we will get error as:- interface D inherits unrelated defaults for method() from types B and C interface D extends B, C

You can fix it like:-

interface D extends B, C {
                @Override
                default void method() {
                    B.super.method();
                }
            }

2. In multiple inheritance of type java allows it because interface doesn't contain mutable fields and only one implementation will belong to the class so java doesn't give any issue and it allows you to do so.

In Conclusion we can say that java doesn't support multiple inheritance of state but it does support multiple inheritance of implementation and multiple inheritance of type.

Solution 4 - Java

> Can an interface extend multiple interfaces in java?

Answer is: Yes.

According to JLS

> An interface may be declared to be a direct extension of one or more > other interfaces, meaning that it implicitly specifies all the member > types, abstract methods, and constants of the interfaces it extends, > except for any member types and constants that it may hide.

Solution 5 - Java

You can extend multiple Interfaces but you cannot extend multiple classes.

The reason that it is not possible in Java to extending multiple classes, is the bad experience from C++ where this is possible.

The alternative for multipe inheritance is that a class can implement multiple interfaces (or an Interface can extend multiple Interfaces)

Solution 6 - Java

I think your confusion lies with multiple inheritance, in which it is bad practise to do so and in Java this is also not possible. However, implementing multiple interfaces is allowed in Java and it is also safe.

Solution 7 - Java

> A Java class can only extend one parent class. Multiple inheritance is not allowed. Interfaces are not classes, however, and an interface can extend more than one parent interface.

for example, take a look here: http://www.tutorialspoint.com/java/java_interfaces.htm

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionPrateekView Question on Stackoverflow
Solution 1 - JavaSuresh AttaView Answer on Stackoverflow
Solution 2 - JavaBut I'm Not A Wrapper ClassView Answer on Stackoverflow
Solution 3 - Javashankar upadhyayView Answer on Stackoverflow
Solution 4 - JavaMasudulView Answer on Stackoverflow
Solution 5 - JavaAlexWienView Answer on Stackoverflow
Solution 6 - JavaCem SultanView Answer on Stackoverflow
Solution 7 - JavammdcView Answer on Stackoverflow