0
0
Kotlinprogramming~20 mins

Class delegation with by keyword in Kotlin - Practice Problems & Coding Challenges

Choose your learning style9 modes available
Challenge - 5 Problems
πŸŽ–οΈ
Delegation Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
Output of class delegation example
What is the output of this Kotlin code using class delegation with the by keyword?
Kotlin
interface Printer {
    fun printMessage()
}

class ConsolePrinter : Printer {
    override fun printMessage() {
        println("Printing to console")
    }
}

class DelegatingPrinter(printer: Printer) : Printer by printer

fun main() {
    val printer = ConsolePrinter()
    val delegatingPrinter = DelegatingPrinter(printer)
    delegatingPrinter.printMessage()
}
APrinting to console
BNo output
CRuntime exception
DCompilation error
Attempts:
2 left
πŸ’‘ Hint
Remember that the by keyword delegates interface implementation to the given object.
❓ Predict Output
intermediate
2:00remaining
Delegation with method override
What will be printed when running this Kotlin code that uses delegation but overrides one method?
Kotlin
interface Speaker {
    fun speak()
    fun shout()
}

class LoudSpeaker : Speaker {
    override fun speak() = println("Speaking softly")
    override fun shout() = println("SHOUTING")
}

class CustomSpeaker(speaker: Speaker) : Speaker by speaker {
    override fun speak() = println("Custom speaking")
}

fun main() {
    val loudSpeaker = LoudSpeaker()
    val customSpeaker = CustomSpeaker(loudSpeaker)
    customSpeaker.speak()
    customSpeaker.shout()
}
A
Speaking softly
SHOUTING
B
Custom speaking
SHOUTING
C
Custom speaking
Speaking softly
D
SHOUTING
Custom speaking
Attempts:
2 left
πŸ’‘ Hint
Delegation forwards calls except for overridden methods in the delegating class.
πŸ”§ Debug
advanced
2:00remaining
Identify the error in delegation usage
This Kotlin code tries to delegate an interface but causes a compilation error. What is the cause?
Kotlin
interface Calculator {
    fun add(a: Int, b: Int): Int
}

class SimpleCalculator : Calculator {
    override fun add(a: Int, b: Int) = a + b
}

class Delegator : Calculator by SimpleCalculator() {
    fun subtract(a: Int, b: Int) = a - b
}

fun main() {
    val d = Delegator()
    println(d.add(5, 3))
    println(d.subtract(5, 3))
}
ANo error, code runs and prints 8 and 2
BError because Delegator must implement subtract() from Calculator
CError because SimpleCalculator() cannot be used directly in delegation
DError because Delegator does not have a primary constructor
Attempts:
2 left
πŸ’‘ Hint
Delegation only requires implementing interface methods; extra methods are allowed.
❓ Predict Output
advanced
2:00remaining
Delegation with multiple interfaces
What is the output of this Kotlin program that delegates two interfaces using separate objects?
Kotlin
interface Writer {
    fun write()
}

interface Reader {
    fun read()
}

class FileWriter : Writer {
    override fun write() = println("Writing to file")
}

class FileReader : Reader {
    override fun read() = println("Reading from file")
}

class FileHandler(writer: Writer, reader: Reader) : Writer by writer, Reader by reader

fun main() {
    val writer = FileWriter()
    val reader = FileReader()
    val handler = FileHandler(writer, reader)
    handler.write()
    handler.read()
}
ACompilation error due to multiple delegation
B
Reading from file
Writing to file
C
Writing to file
Reading from file
DRuntime exception due to ambiguous delegation
Attempts:
2 left
πŸ’‘ Hint
Kotlin supports delegation of multiple interfaces by separate objects.
🧠 Conceptual
expert
2:00remaining
Understanding delegation and method resolution
Consider a Kotlin class Master that delegates interface Worker to an object but also overrides one method. Which statement is true about method calls on Master?
AAll interface methods are forwarded to the delegate object, ignoring any overrides in Master.
BDelegation disables method overriding; Master cannot override any interface method.
CMaster must implement all interface methods explicitly; delegation is only for property access.
DCalls to overridden methods in Master execute Master’s code; other interface methods are forwarded to the delegate object.
Attempts:
2 left
πŸ’‘ Hint
Delegation forwards calls except when the delegating class overrides the method.