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
Multiple inheritance using interfaces
π Scenario: Imagine you are building a simple system for a smart home. Different devices can perform different actions. Some devices can turn on lights, others can play music, and some can do both.
π― Goal: You will create two interfaces, LightControl and MusicControl, each with one method. Then, you will create a class SmartDevice that inherits from both interfaces and implements their methods. Finally, you will create an object of SmartDevice and call both methods.
π What You'll Learn
Create an interface called LightControl with a method turnOnLight().
Create an interface called MusicControl with a method playMusic().
Create a class called SmartDevice that implements both LightControl and MusicControl.
Implement the methods turnOnLight() and playMusic() in SmartDevice.
Create a main method to create an object of SmartDevice and call both methods.
π‘ Why This Matters
π Real World
Smart home devices often need to perform multiple actions. Using interfaces allows devices to inherit multiple behaviors cleanly.
πΌ Career
Understanding multiple inheritance with interfaces is important for designing flexible and reusable code in Java, a common skill in software development jobs.
Progress0 / 4 steps
1
Create interfaces for light and music control
Create an interface called LightControl with a method void turnOnLight(). Also create an interface called MusicControl with a method void playMusic().
Java
Hint
Use the interface keyword to create interfaces. Define methods without a body.
2
Create SmartDevice class implementing both interfaces
Create a class called SmartDevice that implements both LightControl and MusicControl interfaces.
Java
Hint
Use implements keyword to inherit from interfaces. Separate multiple interfaces with commas.
3
Implement methods in SmartDevice
Inside the SmartDevice class, implement the methods turnOnLight() and playMusic(). Make turnOnLight() print "Light is turned on" and playMusic() print "Music is playing".
Java
Hint
Remember to add public before method names when implementing interface methods.
4
Create main method and test SmartDevice
Create a public static void main(String[] args) method inside a class called Main. Inside it, create an object of SmartDevice called device. Call device.turnOnLight() and device.playMusic().
Java
Hint
Make sure to create the Main class with the main method. Then create the SmartDevice object and call both methods.
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
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 A
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
Step 1: Recall Java syntax for implementing multiple interfaces
Java uses the keyword implements followed by a comma-separated list of interfaces.
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.
Final Answer:
public class Car implements Engine, Wheels {} -> Option C
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
Step 1: Understand default methods in interfaces
Both interfaces A and B have a default method show(). Class C implements both and overrides show().
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.
Final Answer:
A
B -> Option B
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
Step 1: Check interface method requirements
Interfaces X and Y both declare display() method without implementation.
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.
Final Answer:
Class Z must implement display() method or be declared abstract -> Option A
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
Step 1: Understand interface implementation and method overriding
FileHandler must implement both read() and write() 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 keyword extend. 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 D
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