Can an interface extend multiple interfaces in Java?

140,886

Solution 1

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

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

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();
                }
            }
  1. 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

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

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)

Share:
140,886
Prateek
Author by

Prateek

Updated on July 08, 2022

Comments

  • Prateek
    Prateek almost 2 years

    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?

    • Admin
      Admin over 10 years
      Which articles say it's not possible? They're either wrong, or you misunderstood them and they're talking about classes rather than interfaces.
    • JoseK
      JoseK over 10 years
      This question appears to be off-topic because it could easily be answered by self-research
    • Stephen C
      Stephen C over 10 years
      ... or simply by reading the articles you found more carefully.
    • But I'm Not A Wrapper Class
      But I'm Not A Wrapper Class over 10 years
      @StephenC If he did find contradicting articles, he should post them. That way people know not to read those articles...
    • Stephen C
      Stephen C over 10 years
      @MohammadS - that is true, but I doubt that it is the case. This is really basic stuff, and I'd bet the problem is in the reading, not the writing ...
    • xdhmoore
      xdhmoore about 9 years
      The answer to this question saved me time. I argue that it has value as a valid question.
    • Thusitha Wickramasinghe
      Thusitha Wickramasinghe over 8 years
      yes, extends and implement are different from each.
    • Arthur
      Arthur about 8 years
      helpful question, I did this expecting my IDE to throw some warnings, was amazed to see none. So I unknowingly typed in google the same question as the op's which led me to this page with some answers/confirmation
    • Siddhesh Rane
      Siddhesh Rane almost 4 years
      Java does not allow multiplle inheritance of state (classes), but it allows multiple inheritance of behaviour (interface).
  • Suresh Atta
    Suresh Atta almost 10 years
    @RahulBhadana Abstract method should override right ?
  • Daniel
    Daniel over 9 years
    What if you have interface A with void test() and interface B with boolean test()? (Is this a cousin of the diamond problem?) __Tried it and the sensible thing happens: not allowed if the return type is different.
  • Hontvári Levente
    Hontvári Levente about 9 years
    JLS = "Java Language Specification" which is the authoritative source in these questions.
  • Fattie
    Fattie over 7 years
    @sureshatta - so what happens? does it call both ??
  • Ninh Pham
    Ninh Pham over 7 years
    A class doesn't allow 2 methods same signature with different return type. stackoverflow.com/questions/16149285/…
  • Ketan Joshi
    Ketan Joshi over 4 years
    I think this is a more suitable answer and clarifies more to the question. +1
  • shankar upadhyay
    shankar upadhyay over 4 years
    Thank you @KetanJoshi this motivates a lot to carry on :)
  • shankar upadhyay
    shankar upadhyay about 3 years
    @Danger here the focus is not on defining a method inside interface, obviously from Java 8 we can define it. Hope i have answered you. Thanks Shankar
  • Danger
    Danger about 3 years
    Hi @shankarupadhyay, I'm just saying that if you are defining interface then do not put method implementation inside an interface, just declare the methods , or use class. As developers we should not do these mistakes, even if the focus is on something else.