Bird
Raised Fist0
Kotlinprogramming~20 mins

Overriding methods with override in Kotlin - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Override Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
Output of overridden method call
What is the output of this Kotlin code when calling greet() on an instance of Dog?
Kotlin
open class Animal {
    open fun greet() = "Hello from Animal"
}

class Dog : Animal() {
    override fun greet() = "Woof from Dog"
}

fun main() {
    val pet: Animal = Dog()
    println(pet.greet())
}
AWoof from Dog
BHello from Animal
CCompilation error: missing override keyword
DRuntime error: method not found
Attempts:
2 left
💡 Hint
Remember that the override keyword allows a subclass to provide its own implementation of a method.
❓ Predict Output
intermediate
2:00remaining
Output when calling base and overridden methods
What will be printed when running this Kotlin code?
Kotlin
open class Vehicle {
    open fun start() = "Vehicle started"
}

class Car : Vehicle() {
    override fun start() = "Car started"
    fun startBase() = super.start()
}

fun main() {
    val myCar = Car()
    println(myCar.start())
    println(myCar.startBase())
}
ACompilation error: cannot call super in this context
BCar started\nCar started
CVehicle started\nVehicle started
DCar started\nVehicle started
Attempts:
2 left
💡 Hint
The super keyword calls the base class method even if it is overridden.
🔧 Debug
advanced
2:00remaining
Identify the error in method overriding
Why does this Kotlin code fail to compile?
Kotlin
open class Shape {
    fun draw() = "Drawing shape"
}

class Circle : Shape() {
    override fun draw() = "Drawing circle"
}
ACannot override 'draw' because it is not open in base class
BMissing override keyword in subclass
CFunction signatures do not match
DNo error, code compiles fine
Attempts:
2 left
💡 Hint
In Kotlin, only methods marked open can be overridden.
📝 Syntax
advanced
2:00remaining
Correct override syntax
Which option correctly overrides the calculate() method in Kotlin?
Kotlin
open class Calculator {
    open fun calculate(x: Int): Int = x * 2
}

class AdvancedCalculator : Calculator() {
    // override method here
}
Aoverride calculate(x: Int): Int = x * 3
Bfun override calculate(x: Int): Int = x * 3
Coverride fun calculate(x: Int): Int = x * 3
Doverride fun calculate(x): Int = x * 3
Attempts:
2 left
💡 Hint
The override keyword must come before fun and the parameter types must be specified.
🚀 Application
expert
3:00remaining
Determine output with multiple overrides and calls
What is the output of this Kotlin program?
Kotlin
open class A {
    open fun foo() = "A"
    fun bar() = foo()
}

class B : A() {
    override fun foo() = "B"
}

class C : B() {
    override fun foo() = "C"
    fun test() = super.foo()
}

fun main() {
    val c = C()
    println(c.foo())
    println(c.bar())
    println(c.test())
}
AC\nB\nB
BC\nC\nB
CB\nB\nA
DC\nA\nB
Attempts:
2 left
💡 Hint
Remember that super refers to the immediate superclass, and method calls use the most derived override.

Practice

(1/5)
1. What keyword must be used in Kotlin to allow a method in a parent class to be overridden in a child class?
easy
A. open
B. override
C. final
D. abstract

Solution

  1. Step 1: Understand method overriding rules in Kotlin

    In Kotlin, methods are final by default and cannot be overridden unless marked otherwise.
  2. Step 2: Identify the keyword to allow overriding

    The open keyword is used in the parent class method to allow it to be overridden in subclasses.
  3. Final Answer:

    open -> Option A
  4. Quick Check:

    Parent method must be open to override [OK]
Hint: Parent method needs 'open' to allow override [OK]
Common Mistakes:
  • Using 'override' in parent method instead of 'open'
  • Forgetting to mark parent method as 'open'
  • Using 'final' which prevents overriding
2. Which of the following is the correct way to override a method named greet in a Kotlin subclass?
easy
A. fun greet() { println("Hello") }
B. override fun greet() { println("Hello") }
C. open fun greet() { println("Hello") }
D. final fun greet() { println("Hello") }

Solution

  1. Step 1: Recall syntax for overriding methods in Kotlin

    To override a method, the subclass method must use the override keyword.
  2. Step 2: Check each option

    override fun greet() { println("Hello") } correctly uses override fun greet(). fun greet() { println("Hello") } misses override. open fun greet() { println("Hello") } uses open which is for parent methods. final fun greet() { println("Hello") } uses final which prevents overriding.
  3. Final Answer:

    override fun greet() { println("Hello") } -> Option B
  4. Quick Check:

    Use override keyword in subclass method [OK]
Hint: Use 'override' keyword before method in subclass [OK]
Common Mistakes:
  • Omitting 'override' keyword in subclass method
  • Using 'open' instead of 'override' in subclass
  • Marking subclass method as 'final' which disallows override
3. What will be the output of the following Kotlin code?
open class Animal {
    open fun sound() = "Generic sound"
}

class Dog : Animal() {
    override fun sound() = "Bark"
}

fun main() {
    val pet: Animal = Dog()
    println(pet.sound())
}
medium
A. Generic sound
B. Compilation error
C. Bark
D. Runtime exception

Solution

  1. Step 1: Understand method overriding and polymorphism

    The variable pet is of type Animal but holds a Dog object. The overridden sound() method in Dog will be called.
  2. Step 2: Determine output of pet.sound()

    Since Dog overrides sound() to return "Bark", the output will be "Bark".
  3. Final Answer:

    Bark -> Option C
  4. Quick Check:

    Overridden method runs based on actual object type [OK]
Hint: Overridden method runs from actual object type [OK]
Common Mistakes:
  • Thinking output is from parent class method
  • Confusing variable type with object type
  • Expecting compilation or runtime errors
4. Identify the error in the following Kotlin code:
open class Vehicle {
    fun start() = "Starting"
}

class Car : Vehicle() {
    override fun start() = "Car starting"
}
medium
A. No error, code is correct
B. Missing 'override' keyword in Car's start method
C. Cannot override a method in Kotlin
D. Missing 'open' keyword on Vehicle's start method

Solution

  1. Step 1: Check if parent method allows overriding

    The start() method in Vehicle is not marked open, so it cannot be overridden.
  2. Step 2: Identify the error in subclass

    The Car class tries to override start() but parent method is not open, causing a compilation error.
  3. Final Answer:

    Missing 'open' keyword on Vehicle's start method -> Option D
  4. Quick Check:

    Parent method must be 'open' to override [OK]
Hint: Parent method must be 'open' to override it [OK]
Common Mistakes:
  • Forgetting to mark parent method as 'open'
  • Trying to override non-open method
  • Assuming 'override' alone allows overriding
5. Given the following Kotlin classes, what will be the output when main() is run?
open class Printer {
    open fun print() = "Printing document"
}

class ColorPrinter : Printer() {
    override fun print() = "Printing in color"
}

class PhotoPrinter : ColorPrinter() {
    override fun print() = "Printing photo in color"
}

fun main() {
    val printer: Printer = PhotoPrinter()
    println(printer.print())
}
hard
A. Printing photo in color
B. Printing in color
C. Printing document
D. Compilation error due to multiple overrides

Solution

  1. Step 1: Understand class hierarchy and method overriding

    PhotoPrinter overrides print() from ColorPrinter, which overrides Printer's method.
  2. Step 2: Determine which method runs for printer.print()

    The variable printer is of type Printer but holds a PhotoPrinter object, so the most derived override runs, which is PhotoPrinter.print().
  3. Final Answer:

    Printing photo in color -> Option A
  4. Quick Check:

    Most derived override runs based on actual object type [OK]
Hint: Most derived override runs, even with parent type variable [OK]
Common Mistakes:
  • Thinking parent class method runs instead of child's
  • Confusing override chain in multi-level inheritance
  • Expecting compilation error due to multiple overrides
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard