Challenge - 5 Problems
Kotlin Extensions Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate2:00remaining
Output of member function vs extension function
What is the output of this Kotlin code snippet?
Kotlin
class Sample { fun greet() = "Member" } fun Sample.greet() = "Extension" fun main() { val s = Sample() println(s.greet()) }
Attempts:
2 left
💡 Hint
Member functions have higher priority than extension functions when called on an instance.
✗ Incorrect
In Kotlin, if a member function and an extension function have the same signature, the member function is called, not the extension.
❓ Predict Output
intermediate2:00remaining
Extension function called on nullable receiver
What is the output of this Kotlin code?
Kotlin
class Box { fun info() = "Member Box" } fun Box?.info() = "Extension Box?" fun main() { val b: Box? = null println(b.info()) }
Attempts:
2 left
💡 Hint
Extension functions can be called on nullable receivers, but member functions cannot.
✗ Incorrect
Since b is null, member function info() cannot be called. The extension function with nullable receiver is called instead.
🔧 Debug
advanced2:00remaining
Why does this extension function not override the member function?
Consider this Kotlin code. Why does calling foo() print "Member" instead of "Extension"?
Kotlin
open class Base { fun foo() = "Member" } fun Base.foo() = "Extension" fun main() { val b: Base = Base() println(b.foo()) }
Attempts:
2 left
💡 Hint
Extension functions are resolved statically and do not override member functions.
✗ Incorrect
Extension functions are resolved at compile time and do not override member functions. Member functions always have priority.
🧠 Conceptual
advanced2:00remaining
Extension function dispatch behavior
Which statement best describes how Kotlin resolves extension functions compared to member functions?
Attempts:
2 left
💡 Hint
Think about how Kotlin decides which function to call when both member and extension functions exist.
✗ Incorrect
Member functions are virtual and resolved at runtime based on the actual object type. Extension functions are resolved at compile time based on the declared type.
❓ Predict Output
expert3:00remaining
Output with extension function and inheritance
What is the output of this Kotlin program?
Kotlin
open class Parent { fun greet() = "Parent member" } class Child : Parent() fun Parent.greet() = "Parent extension" fun Child.greet() = "Child extension" fun main() { val c: Parent = Child() println(c.greet()) }
Attempts:
2 left
💡 Hint
Member functions have priority over extension functions even when the runtime type is a subclass.
✗ Incorrect
The variable c is declared as Parent, so extension function for Parent is considered. But member function greet() exists and has priority, so "Parent member" is printed.