Challenge - 5 Problems
Kotlin Inheritance Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate2:00remaining
What is the output of this Kotlin code involving open keyword?
Consider the following Kotlin code snippet. What will be the output when it runs?
Kotlin
open class Animal { open fun sound() = "Some sound" } class Dog : Animal() { override fun sound() = "Bark" } fun main() { val dog = Dog() println(dog.sound()) }
Attempts:
2 left
💡 Hint
Remember that in Kotlin classes are final by default unless marked open.
✗ Incorrect
The class Animal is marked open, so it can be inherited. The Dog class overrides the sound() method to return "Bark". Thus, the output is "Bark".
❓ Predict Output
intermediate2:00remaining
What error occurs if open keyword is missing on a Kotlin class?
What happens if you try to inherit from a Kotlin class that is not marked with the open keyword?
Kotlin
class Vehicle { fun drive() = "Driving" } class Car : Vehicle() {} fun main() { val car = Car() println(car.drive()) }
Attempts:
2 left
💡 Hint
Kotlin classes are final by default.
✗ Incorrect
Since Vehicle is not marked open, Kotlin does not allow inheritance from it, causing a compilation error.
🔧 Debug
advanced2:30remaining
Identify the cause of the compilation error in this Kotlin inheritance code
Why does this Kotlin code fail to compile?
Kotlin
class Parent { fun greet() = "Hello" } class Child : Parent() { override fun greet() = "Hi" } fun main() { val child = Child() println(child.greet()) }
Attempts:
2 left
💡 Hint
Kotlin classes are final by default.
✗ Incorrect
Since Parent is not marked open, Kotlin does not allow inheritance from it, causing a compilation error.
🧠 Conceptual
advanced2:00remaining
Why does Kotlin require the open keyword for inheritance?
Which of the following best explains why Kotlin requires the open keyword on classes and functions to allow inheritance and overriding?
Attempts:
2 left
💡 Hint
Think about Kotlin's design choice for safety.
✗ Incorrect
Kotlin makes classes and functions final by default to avoid accidental inheritance and overriding, which can cause bugs. The open keyword explicitly allows inheritance.
❓ Predict Output
expert3:00remaining
What is the output of this Kotlin code with open and override keywords?
Analyze the following Kotlin code and determine its output.
Kotlin
open class A { open fun foo() = "A" } open class B : A() { override fun foo() = "B" } class C : B() { override fun foo() = "C" } fun main() { val obj: A = C() println(obj.foo()) }
Attempts:
2 left
💡 Hint
Remember that the actual object's method is called, not the reference type's.
✗ Incorrect
The variable obj is of type A but holds an instance of C. The overridden foo() in C is called, printing "C".