Multiple inheritance lets a class use features from more than one source. Java uses interfaces to do this safely.
Multiple inheritance using interfaces in Java
Start learning this pattern below
Jump into concepts and practice - no test required
or
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Introduction
Syntax
Java
interface Interface1 { void method1(); } interface Interface2 { void method2(); } class MyClass implements Interface1, Interface2 { public void method1() { // code here } public void method2() { // code here } }
A class can implement many interfaces separated by commas.
All interface methods must be implemented in the class.
Examples
Java
interface Flyable { void fly(); } interface Swimmable { void swim(); } class Duck implements Flyable, Swimmable { public void fly() { System.out.println("Duck is flying"); } public void swim() { System.out.println("Duck is swimming"); } }
Java
interface Printable { void print(); } interface Showable { void show(); } class Document implements Printable, Showable { public void print() { System.out.println("Printing document"); } public void show() { System.out.println("Showing document"); } }
Sample Program
This program shows a Robot class using two interfaces to speak and move.
Java
interface Speaker { void speak(); } interface Mover { void move(); } class Robot implements Speaker, Mover { public void speak() { System.out.println("Robot says: Hello!"); } public void move() { System.out.println("Robot is moving forward"); } } public class Main { public static void main(String[] args) { Robot r = new Robot(); r.speak(); r.move(); } }
Important Notes
Interfaces only have method declarations, no code inside methods (except default methods in newer Java).
Multiple inheritance with classes is not allowed in Java to avoid confusion, but interfaces solve this.
Use interfaces to design flexible and clear contracts for classes.
Summary
Java uses interfaces to allow multiple inheritance safely.
A class can implement many interfaces and must define their methods.
This helps build flexible and reusable code parts.
Practice
1. What is the main reason Java uses interfaces for multiple inheritance instead of classes?
easy
Solution
Step 1: Understand Java inheritance limitations
Java does not allow multiple inheritance with classes to avoid ambiguity known as the diamond problem.Step 2: Role of interfaces in multiple inheritance
Interfaces allow multiple inheritance of type without implementation conflicts, enabling safe multiple inheritance.Final Answer:
To avoid the diamond problem and allow safe multiple inheritance -> Option AQuick Check:
Interfaces solve diamond problem = A [OK]
Hint: Interfaces enable multiple inheritance safely in Java [OK]
Common Mistakes:
- Thinking Java supports multiple class inheritance
- Believing interfaces improve speed
- Confusing method overriding prevention
2. Which of the following is the correct syntax for a class
Car implementing two interfaces Engine and Wheels?easy
Solution
Step 1: Recall Java syntax for implementing multiple interfaces
Java uses the keywordimplementsfollowed by a comma-separated list of interfaces.Step 2: Check each option's syntax
public class Car implements Engine, Wheels {} correctly usesimplements Engine, Wheels. Options B and D incorrectly useextendsfor interfaces or mix keywords wrongly. public class Car implements Engine & Wheels {} uses an invalid '&' symbol.Final Answer:
public class Car implements Engine, Wheels {} -> Option CQuick Check:
Multiple interfaces use comma with implements = A [OK]
Hint: Use 'implements' with commas for multiple interfaces [OK]
Common Mistakes:
- Using extends instead of implements for interfaces
- Using '&' instead of commas
- Mixing extends and implements incorrectly
3. What will be the output of the following code?
interface A {
default void show() { System.out.println("A"); }
}
interface B {
default void show() { System.out.println("B"); }
}
class C implements A, B {
public void show() {
A.super.show();
B.super.show();
}
}
public class Test {
public static void main(String[] args) {
C obj = new C();
obj.show();
}
}medium
Solution
Step 1: Understand default methods in interfaces
Both interfaces A and B have a default methodshow(). Class C implements both and overridesshow().Step 2: Analyze method calls inside C's show()
C'sshow()callsA.super.show()thenB.super.show(), so it prints "A" then "B" on separate lines.Final Answer:
A B -> Option BQuick Check:
Calling both interface methods prints A then B [OK]
Hint: Use InterfaceName.super.method() to call specific default methods [OK]
Common Mistakes:
- Expecting compilation error without override
- Confusing order of prints
- Missing super calls causing ambiguity
4. Identify the error in the following code snippet:
interface X {
void display();
}
interface Y {
void display();
}
class Z implements X, Y {
// No display() method implemented
}medium
Solution
Step 1: Check interface method requirements
Interfaces X and Y both declaredisplay()method without implementation.Step 2: Check class Z implementation
Class Z implements both interfaces but does not providedisplay()method, so it must be abstract or implement the method.Final Answer:
Class Z must implement display() method or be declared abstract -> Option AQuick Check:
Implement all interface methods or declare abstract = D [OK]
Hint: Implement all interface methods or declare class abstract [OK]
Common Mistakes:
- Assuming no implementation needed if methods have same name
- Thinking interfaces cannot share method names
- Using extends instead of implements for interfaces
5. Given interfaces
Readable and Writable with methods read() and write() respectively, how can you design a class FileHandler that implements both interfaces and provides default logging before each operation? Choose the best approach.hard
Solution
Step 1: Understand interface implementation and method overriding
FileHandler must implement bothread()andwrite()methods from interfaces.Step 2: Add logging before operations
Override methods in FileHandler to add logging code before performing the actual operation.Step 3: Choose best approach
Implement interfaces and add logging inside overridden methods in FileHandler correctly describes implementing interfaces and adding logging inside overridden methods. Implement both interfaces in FileHandler and override methods to add logging then call interface methods incorrectly suggests calling interface methods which have no implementation. Make FileHandler extend both interfaces and implement methods without logging uses wrong keywordextend. Use abstract class instead of interfaces for multiple inheritance avoids interfaces and is not best for multiple inheritance.Final Answer:
Implement interfaces and add logging inside overridden methods in FileHandler -> Option DQuick Check:
Override interface methods to add behavior = C [OK]
Hint: Override interface methods to add extra behavior like logging [OK]
Common Mistakes:
- Trying to extend interfaces instead of implement
- Calling interface methods directly which have no body
- Using abstract class when interfaces are better for multiple inheritance
