📖 Scenario: You are creating a simple app that manages vehicles. You want to allow future changes by letting other developers add new types of vehicles or change how existing ones behave.
🎯 Goal: Learn how to make a class and its method open for extension in Kotlin. You will create an open class, then override its method in a subclass, and finally print the results.
📋 What You'll Learn
Create an open class named Vehicle with an open method drive() that returns a string.
Create a subclass named Car that inherits from Vehicle and overrides the drive() method.
Print the output of calling drive() on both Vehicle and Car objects.
💡 Why This Matters
🌍 Real World
Open classes and methods let developers design flexible software that can grow and change without rewriting existing code.
💼 Career
Understanding open classes is important for Kotlin developers working on apps that require customization and extension, such as Android apps or libraries.
Progress0 / 4 steps
1
Create an open class with an open method
Create an open class called Vehicle with an open method named drive() that returns the string "Driving a vehicle".
Kotlin
Hint
Use the open keyword before the class and the method to allow them to be extended and overridden.
2
Create a subclass that overrides the method
Create a class called Car that inherits from Vehicle and overrides the drive() method to return the string "Driving a car".
Kotlin
Hint
Use class Car : Vehicle() to inherit and override fun drive() to change the method.
3
Create objects and call the methods
Create a variable vehicle as an instance of Vehicle and a variable car as an instance of Car. Call the drive() method on both and store the results in variables vehicleDrive and carDrive.
Kotlin
Hint
Create instances using val variableName = ClassName() and call methods with variable.method().
4
Print the results
Print the variables vehicleDrive and carDrive each on a new line.
Kotlin
Hint
Use println() to show the text on the screen.
Practice
(1/5)
1. In Kotlin, what does the open keyword do when applied to a class or method?
easy
A. Prevents the class or method from being used
B. Makes the class or method private
C. Allows the class or method to be inherited or overridden
D. Automatically overrides the method in subclasses
Solution
Step 1: Understand Kotlin class and method defaults
By default, Kotlin classes and methods are final, meaning they cannot be inherited or overridden.
Step 2: Role of the open keyword
The open keyword explicitly allows a class to be inherited or a method to be overridden in subclasses.
Final Answer:
Allows the class or method to be inherited or overridden -> Option C
Quick Check:
open means inheritance allowed [OK]
Hint: Remember: open means 'can be changed' [OK]
Common Mistakes:
Thinking classes are open by default
Confusing open with override
Assuming open makes methods private
2. Which of the following is the correct way to declare an open method named display in Kotlin?
easy
A. open fun display() { }
B. fun display() open { }
C. fun open display() { }
D. open display fun() { }
Solution
Step 1: Recall Kotlin method declaration syntax
In Kotlin, the keyword fun starts the function declaration, followed by the function name and parentheses.
Step 2: Position of open keyword
The open keyword must come before fun to mark the method as open for overriding.
Final Answer:
open fun display() { } -> Option A
Quick Check:
open fun is correct order [OK]
Hint: Put open before fun for methods [OK]
Common Mistakes:
Placing open after fun
Putting open after method name
Using open without fun keyword
3. What will be the output of the following Kotlin code?
open class Animal {
open fun sound() = "Some sound"
}
class Dog : Animal() {
override fun sound() = "Bark"
}
fun main() {
val pet: Animal = Dog()
println(pet.sound())
}
medium
A. Some sound
B. Bark
C. Compilation error
D. Runtime error
Solution
Step 1: Understand class inheritance and method overriding
The class Dog inherits from Animal and overrides the sound() method to return "Bark".
Step 2: Polymorphism in action
Even though pet is typed as Animal, it holds a Dog instance, so the overridden sound() method in Dog is called.
Final Answer:
Bark -> Option B
Quick Check:
Overridden method runs on subclass instance [OK]
Hint: Overridden methods run on actual object type [OK]
Common Mistakes:
Expecting base class method output
Confusing compile-time and run-time types
Forgetting to mark methods open
4. Identify the error in the following Kotlin code:
class Vehicle {
open fun start() = "Starting"
}
class Car : Vehicle() {
fun start() = "Car starting"
}
medium
A. Method start() in Car must be marked override
B. No error, code is correct
C. Car class cannot inherit from Vehicle
D. Vehicle class must be open to allow inheritance
Solution
Step 1: Check if Vehicle class allows inheritance
By default, Kotlin classes are final. Since Vehicle is not marked open, it cannot be inherited.
Step 2: Analyze the inheritance attempt
Car tries to inherit from Vehicle, which causes a compilation error because Vehicle is not open.
Final Answer:
Vehicle class must be open to allow inheritance -> Option D
Quick Check:
Classes must be open to inherit [OK]
Hint: Mark classes open to inherit them [OK]
Common Mistakes:
Forgetting to mark base class open
Assuming methods override without keyword
Ignoring Kotlin's default final classes
5. You want to create a Kotlin class Shape with an open method area() that returns 0.0 by default. Then create a subclass Circle that overrides area() to return the circle's area using its radius. Which code correctly implements this?
hard
A. open class Shape {
open fun area() = 0.0
}
class Circle(val radius: Double) : Shape() {
override fun area() = 3.14 * radius * radius
}
B. class Shape {
fun area() = 0.0
}
class Circle(val radius: Double) : Shape() {
fun area() = 3.14 * radius * radius
}
C. open class Shape {
fun area() = 0.0
}
class Circle(val radius: Double) : Shape() {
override fun area() = 3.14 * radius * radius
}
D. class Shape {
open fun area() = 0.0
}
class Circle(val radius: Double) : Shape() {
override fun area() = 3.14 * radius * radius
}
Solution
Step 1: Mark base class and method open
To allow inheritance and overriding, Shape must be open and its area() method must also be open.
Step 2: Override method correctly in subclass
Circle inherits from Shape and overrides area() using override keyword, calculating area using radius.
Final Answer:
Option A code correctly implements open class and method with override -> Option A
Quick Check:
Open base and override subclass method [OK]
Hint: Open base class and method, override in subclass [OK]
Common Mistakes:
Not marking class or method open
Missing override keyword in subclass
Trying to override non-open method
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.