Challenge - 5 Problems
Delegation Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
β Predict Output
intermediate2: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() }
Attempts:
2 left
π‘ Hint
Remember that the
by keyword delegates interface implementation to the given object.β Incorrect
The class
DelegatingPrinter delegates the Printer interface to ConsolePrinter. Calling printMessage() on delegatingPrinter calls the method on ConsolePrinter, printing the message.β Predict Output
intermediate2: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() }
Attempts:
2 left
π‘ Hint
Delegation forwards calls except for overridden methods in the delegating class.
β Incorrect
The
CustomSpeaker overrides speak() to print "Custom speaking". The shout() method is delegated to LoudSpeaker, which prints "SHOUTING".π§ Debug
advanced2: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)) }
Attempts:
2 left
π‘ Hint
Delegation only requires implementing interface methods; extra methods are allowed.
β Incorrect
The code compiles and runs fine. Delegator delegates Calculator methods to SimpleCalculator and adds its own subtract method. The output is 8 and 2.
β Predict Output
advanced2: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() }
Attempts:
2 left
π‘ Hint
Kotlin supports delegation of multiple interfaces by separate objects.
β Incorrect
The class FileHandler delegates Writer to FileWriter and Reader to FileReader. Calling write() and read() prints the respective messages in order.
π§ Conceptual
expert2: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?Attempts:
2 left
π‘ Hint
Delegation forwards calls except when the delegating class overrides the method.
β Incorrect
In Kotlin, delegation forwards interface method calls to the delegate object unless the delegating class overrides the method, in which case the override is used.