What if you could give your class many superpowers without messy code?
Why Multiple inheritance using interfaces in Java? - Purpose & Use Cases
Start learning this pattern below
Jump into concepts and practice - no test required
Imagine you want a class to have features from two different sources, like a smartphone that can both make calls and play music. Without multiple inheritance, you'd have to copy code or create complex workarounds.
Trying to copy code or use single inheritance only means you miss out on combining features easily. It becomes slow to write, hard to maintain, and prone to mistakes because you repeat yourself or create tangled code.
Using interfaces lets you declare multiple sets of abilities that a class can promise to have. This way, your class can inherit from many interfaces, combining features cleanly without code duplication.
class Phone { void call() { } } class MusicPlayer { void playMusic() { } } // No easy way to combine both in one class
interface Caller {
void call();
}
interface Player {
void playMusic();
}
class SmartPhone implements Caller, Player {
public void call() { }
public void playMusic() { }
}You can build flexible classes that combine many abilities, making your programs more powerful and easier to extend.
Think of a smart home device that acts as a speaker, a light controller, and a security alarm all at once. Interfaces let you design it to handle all these roles smoothly.
Manual code copying is slow and error-prone.
Interfaces let classes promise multiple abilities.
This makes combining features clean and easy.
Practice
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]
- Thinking Java supports multiple class inheritance
- Believing interfaces improve speed
- Confusing method overriding prevention
Car implementing two interfaces Engine and Wheels?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]
- Using extends instead of implements for interfaces
- Using '&' instead of commas
- Mixing extends and implements incorrectly
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();
}
}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]
- Expecting compilation error without override
- Confusing order of prints
- Missing super calls causing ambiguity
interface X {
void display();
}
interface Y {
void display();
}
class Z implements X, Y {
// No display() method implemented
}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]
- Assuming no implementation needed if methods have same name
- Thinking interfaces cannot share method names
- Using extends instead of implements for 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.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]
- 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
