Multiple interface implementation in Kotlin - Time & Space Complexity
Let's see how the time needed changes when a Kotlin class implements multiple interfaces.
We want to know how the program's work grows as we call methods from these interfaces.
Analyze the time complexity of the following code snippet.
interface A {
fun actionA()
}
interface B {
fun actionB()
}
class MultiImpl : A, B {
override fun actionA() {
println("Action A")
}
override fun actionB() {
println("Action B")
}
}
fun main() {
val obj = MultiImpl()
obj.actionA()
obj.actionB()
}
This code shows a class implementing two interfaces and calling their methods.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Calling each interface method once.
- How many times: Each method is called exactly one time.
Since each method runs once, the work does not grow with input size.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | 2 (calls to actionA and actionB) |
| 100 | 2 (still just two calls) |
| 1000 | 2 (no increase in calls) |
Pattern observation: The number of operations stays the same no matter how big the input is.
Time Complexity: O(1)
This means the time needed stays constant regardless of input size.
[X] Wrong: "Implementing multiple interfaces makes the program slower as input grows."
[OK] Correct: The number of method calls does not depend on input size here, so speed stays steady.
Understanding how multiple interfaces affect performance helps you explain design choices clearly and confidently.
"What if each interface method contained a loop over a list of size n? How would the time complexity change?"
Practice
Solution
Step 1: Understand interface implementation
Implementing interfaces means the class must provide the functions declared in those interfaces.Step 2: Check multiple interfaces
When multiple interfaces are implemented, the class must provide all functions from each interface.Final Answer:
The class agrees to provide all functions defined in all those interfaces. -> Option CQuick Check:
Multiple interface implementation = implement all interface functions [OK]
- Thinking interfaces provide code automatically
- Believing only one interface's functions are needed
- Assuming class can't have its own functions
MyClass implementing interfaces InterfaceA and InterfaceB?Solution
Step 1: Recall Kotlin interface syntax
Kotlin uses a colon (:) to implement interfaces, separated by commas.Step 2: Check each option
class MyClass : InterfaceA, InterfaceB {} uses colon and commas correctly. Options B and C use Java-like keywords. class MyClass : InterfaceA & InterfaceB {} uses & which is invalid in Kotlin.Final Answer:
class MyClass : InterfaceA, InterfaceB {} -> Option AQuick Check:
Use ':' and commas for interfaces [OK]
- Using 'implements' keyword like Java
- Using 'extends' for interfaces
- Using '&' to combine interfaces
interface A { fun greet() = println("Hello from A") }
interface B { fun greet() = println("Hello from B") }
class C : A, B {
override fun greet() {
super<A>.greet()
super<B>.greet()
}
}
fun main() {
val c = C()
c.greet()
}Solution
Step 1: Understand interface default methods
Both interfaces A and B have greet() with default implementations.Step 2: Check class C's override
C overrides greet() and calls both super<A>.greet() and super<B>.greet() in order.Step 3: Predict output
First prints "Hello from A", then "Hello from B" on separate lines.Final Answer:
Hello from A Hello from B -> Option AQuick Check:
Calling both super interface methods prints both greetings [OK]
- Assuming compilation error due to method conflict
- Only calling one interface's greet()
- Mixing order of greetings
D implements interfaces X and Y:interface X { fun foo() }
interface Y { fun bar() }
class D : X, Y {
override fun foo() { println("foo") }
}Solution
Step 1: Check implemented interfaces
D implements X and Y, so must override all their functions.Step 2: Verify overridden functions
D overrides foo() from X but does not override bar() from Y.Step 3: Identify error
Missing override of bar() causes compilation error.Final Answer:
Missing override of bar() from interface Y -> Option BQuick Check:
All interface functions must be overridden [OK]
- Forgetting to override all interface methods
- Thinking multiple interfaces are not allowed
- Assuming override is optional
interface Printer { fun print() }
interface Scanner { fun scan() }You want a class
MultiFunctionDevice that implements both and logs each action. Which is the best way to implement this?Solution
Step 1: Understand requirement
MultiFunctionDevice must implement both Printer and Scanner interfaces.Step 2: Check options
class MultiFunctionDevice : Printer, Scanner { override fun print() { println("Printing...") } override fun scan() { println("Scanning...") } } implements both interfaces and overrides both functions with logging. Options A and B implement only one interface each. class MultiFunctionDevice { fun print() { println("Printing...") } fun scan() { println("Scanning...") } } does not implement interfaces.Final Answer:
class MultiFunctionDevice : Printer, Scanner { override fun print() { println("Printing...") } override fun scan() { println("Scanning...") } } -> Option DQuick Check:
Implement all interfaces and override all methods [OK]
- Implementing only one interface when multiple are needed
- Not overriding interface methods
- Not declaring interfaces in class header
Ready to prove it?
Pass the test and this pattern moves unknown
