Bird
Raised Fist0
Javaprogramming~10 mins

Multiple inheritance using interfaces in Java - Step-by-Step Execution

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Concept Flow - Multiple inheritance using interfaces
Define Interface A
Define Interface B
Define Class C implements A, B
Create object of Class C
Call methods from A and B via C
This flow shows how a class can inherit from multiple interfaces and implement their methods.
Execution Sample
Java
interface A {
    void methodA();
}
interface B {
    void methodB();
}
class C implements A, B {
    public void methodA() { System.out.println("A method"); }
    public void methodB() { System.out.println("B method"); }
}
public class Test {
    public static void main(String[] args) {
        C obj = new C();
        obj.methodA();
        obj.methodB();
    }
}
This code shows a class C implementing two interfaces A and B, then calling their methods.
Execution Table
StepActionEvaluationResult
1Define interface A with methodA()No outputInterface A ready
2Define interface B with methodB()No outputInterface B ready
3Define class C implementing A and BNo outputClass C ready with methodA and methodB
4Create object obj of class Cobj = new C()Object obj created
5Call obj.methodA()Calls methodA()Prints: A method
6Call obj.methodB()Calls methodB()Prints: B method
7End of main methodProgram endsExecution stops
💡 Program ends after calling both interface methods via class C object
Variable Tracker
VariableStartAfter Step 4After Step 7
objnullReference to new C()Reference to new C() (no change)
Key Moments - 2 Insights
Why can class C implement both interfaces A and B without conflict?
Because interfaces only declare methods without implementation, class C provides its own implementations, avoiding conflicts as shown in execution_table steps 3 to 6.
What happens if class C does not implement one of the interface methods?
The code will not compile because Java requires all interface methods to be implemented, as implied by step 3 where class C is defined.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what is printed when obj.methodA() is called at step 5?
AB method
BNo output
CA method
DCompilation error
💡 Hint
Refer to execution_table row 5 where obj.methodA() prints 'A method'
At which step is the object obj created?
AStep 3
BStep 4
CStep 5
DStep 6
💡 Hint
Check execution_table row 4 for object creation
If class C did not implement methodB(), what would happen?
ACompilation error
BRuntime error
CProgram runs normally
DmethodB() prints default message
💡 Hint
Recall key_moments about interface method implementation requirements
Concept Snapshot
Multiple inheritance in Java is done using interfaces.
A class can implement multiple interfaces.
Interfaces declare methods without bodies.
The class must implement all interface methods.
This avoids conflicts of multiple inheritance.
Use 'class C implements A, B' syntax.
Full Transcript
This example shows how Java uses interfaces to allow multiple inheritance. Interfaces A and B declare methods methodA and methodB. Class C implements both interfaces and provides method bodies. In main, an object of C calls both methods, printing their messages. This avoids the problems of multiple inheritance with classes by requiring explicit implementation. The execution table traces each step from interface definition to method calls. Variable tracking shows the object creation and usage. Key moments clarify why all methods must be implemented and how conflicts are avoided. The visual quiz tests understanding of method calls, object creation, and compilation rules. The snapshot summarizes the syntax and rules for multiple inheritance using interfaces in Java.

Practice

(1/5)
1. What is the main reason Java uses interfaces for multiple inheritance instead of classes?
easy
A. To avoid the diamond problem and allow safe multiple inheritance
B. Because Java does not support inheritance at all
C. To make code run faster
D. To prevent any method overriding

Solution

  1. Step 1: Understand Java inheritance limitations

    Java does not allow multiple inheritance with classes to avoid ambiguity known as the diamond problem.
  2. Step 2: Role of interfaces in multiple inheritance

    Interfaces allow multiple inheritance of type without implementation conflicts, enabling safe multiple inheritance.
  3. Final Answer:

    To avoid the diamond problem and allow safe multiple inheritance -> Option A
  4. Quick 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
A. public class Car implements Engine & Wheels {}
B. public class Car extends Engine, Wheels {}
C. public class Car implements Engine, Wheels {}
D. public class Car extends Engine implements Wheels {}

Solution

  1. Step 1: Recall Java syntax for implementing multiple interfaces

    Java uses the keyword implements followed by a comma-separated list of interfaces.
  2. Step 2: Check each option's syntax

    public class Car implements Engine, Wheels {} correctly uses implements Engine, Wheels. Options B and D incorrectly use extends for interfaces or mix keywords wrongly. public class Car implements Engine & Wheels {} uses an invalid '&' symbol.
  3. Final Answer:

    public class Car implements Engine, Wheels {} -> Option C
  4. Quick 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
A. B\nA
B. A\nB
C. Compilation error due to method conflict
D. No output

Solution

  1. Step 1: Understand default methods in interfaces

    Both interfaces A and B have a default method show(). Class C implements both and overrides show().
  2. Step 2: Analyze method calls inside C's show()

    C's show() calls A.super.show() then B.super.show(), so it prints "A" then "B" on separate lines.
  3. Final Answer:

    A B -> Option B
  4. Quick 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
A. Class Z must implement display() method or be declared abstract
B. No error, code compiles fine
C. Interfaces cannot have methods with same name
D. Class Z should extend interfaces, not implement

Solution

  1. Step 1: Check interface method requirements

    Interfaces X and Y both declare display() method without implementation.
  2. Step 2: Check class Z implementation

    Class Z implements both interfaces but does not provide display() method, so it must be abstract or implement the method.
  3. Final Answer:

    Class Z must implement display() method or be declared abstract -> Option A
  4. Quick 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
A. Implement both interfaces in FileHandler and override methods to add logging then call interface methods
B. Make FileHandler extend both interfaces and implement methods without logging
C. Use abstract class instead of interfaces for multiple inheritance
D. Implement interfaces and add logging inside overridden methods in FileHandler

Solution

  1. Step 1: Understand interface implementation and method overriding

    FileHandler must implement both read() and write() methods from interfaces.
  2. Step 2: Add logging before operations

    Override methods in FileHandler to add logging code before performing the actual operation.
  3. 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 keyword extend. Use abstract class instead of interfaces for multiple inheritance avoids interfaces and is not best for multiple inheritance.
  4. Final Answer:

    Implement interfaces and add logging inside overridden methods in FileHandler -> Option D
  5. Quick 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