Abstract classes let you create a basic plan for other classes. Abstract methods are like empty boxes that child classes must fill in.
Abstract classes and methods in Kotlin
abstract class ClassName { abstract fun methodName() fun normalMethod() { // code } }
An abstract class cannot be created directly with ClassName().
Abstract methods have no body and must be implemented in subclasses.
makeSound method.abstract class Animal { abstract fun makeSound() } class Dog : Animal() { override fun makeSound() { println("Woof") } }
abstract class Vehicle { abstract fun startEngine() fun stopEngine() { println("Engine stopped") } } class Car : Vehicle() { override fun startEngine() { println("Car engine started") } }
abstract class Empty { abstract fun doSomething() } // Error: Cannot create instance of abstract class // val test = Empty()
abstract class SingleMethod { abstract fun action() } class SingleImpl : SingleMethod() { override fun action() { println("Action done") } }
This program shows an abstract class Shape with an abstract method area. Circle and Square provide their own area calculations. The describe method is shared.
abstract class Shape { abstract fun area(): Double fun describe() { println("I am a shape") } } class Circle(private val radius: Double) : Shape() { override fun area(): Double { return 3.14159 * radius * radius } } class Square(private val side: Double) : Shape() { override fun area(): Double { return side * side } } fun main() { val circle = Circle(2.0) val square = Square(3.0) circle.describe() println("Circle area: ${circle.area()}") square.describe() println("Square area: ${square.area()}") }
Time complexity depends on the implementation of abstract methods, but calling an abstract method itself is simple and fast.
Space complexity is normal for classes; abstract classes do not add extra memory overhead.
A common mistake is trying to create an object of an abstract class directly, which is not allowed.
Use abstract classes when you want to share code and force subclasses to implement certain methods. Use interfaces if you only want to define methods without any code.
Abstract classes provide a base with some methods to implement later.
Abstract methods have no body and must be implemented by subclasses.
You cannot create objects of abstract classes directly.
Practice
abstract class in Kotlin?Solution
Step 1: Understand abstract class instantiation rules
Abstract classes cannot create objects directly because they are incomplete by design.Step 2: Check method types in abstract classes
Abstract classes can have both abstract methods (without body) and concrete methods (with body).Final Answer:
It cannot be instantiated directly and may contain abstract methods. -> Option AQuick Check:
Abstract class = no direct objects + can have abstract methods [OK]
- Thinking abstract classes can be instantiated
- Believing abstract classes can't have method bodies
- Confusing abstract classes with interfaces
Solution
Step 1: Recall Kotlin syntax for abstract methods
In Kotlin, abstract methods are declared with theabstractkeyword beforefun, followed by the method signature without a body.Step 2: Check each option's syntax
Only abstract fun calculate(): Int matches the correct syntax:abstract fun calculate(): Int. Others have incorrect keyword order or punctuation.Final Answer:
abstract fun calculate(): Int -> Option AQuick Check:
abstract fun method() = correct syntax [OK]
- Placing abstract after fun
- Adding a method body to abstract methods
- Incorrect keyword order
abstract class Animal {
abstract fun sound(): String
}
class Dog : Animal() {
override fun sound() = "Bark"
}
fun main() {
val dog = Dog()
println(dog.sound())
}Solution
Step 1: Understand class inheritance and method override
The abstract classAnimalhas an abstract methodsound(). The subclassDogoverrides it to return "Bark".Step 2: Analyze main function output
Creating aDogobject and callingsound()prints "Bark".Final Answer:
Bark -> Option CQuick Check:
Overridden method returns "Bark" [OK]
- Expecting abstract class method to run
- Confusing method name with output
- Thinking abstract class can be instantiated
abstract class Vehicle {
abstract fun drive()
}
class Car : Vehicle() {
fun drive() {
println("Driving")
}
}Solution
Step 1: Check method overriding rules in Kotlin
When a subclass implements an abstract method, it must use theoverridekeyword.Step 2: Identify missing override keyword
TheCarclass definesdrive()withoutoverride, causing a compilation error.Final Answer:
Missing override keyword in Car's drive method -> Option DQuick Check:
Override keyword required for abstract method implementation [OK]
- Omitting override keyword
- Adding body to abstract method in base class
- Misunderstanding inheritance rules
abstract class Shape {
abstract fun area(): Double
fun description() = "Shape area is ${area()}"
}
class Circle(val radius: Double) : Shape() {
override fun area() = 3.14 * radius * radius
}
fun main() {
val c = Circle(2.0)
println(c.description())
}Solution
Step 1: Calculate area in Circle subclass
Area = π * radius² = 3.14 * 2.0 * 2.0 = 12.56Step 2: Call description method from Shape
Description returns string with area value: "Shape area is 12.56".Final Answer:
Shape area is 12.56 -> Option BQuick Check:
Abstract method overridden, description uses area() [OK]
- Forgetting to override abstract method
- Miscomputing area formula
- Expecting abstract class method to run alone
Ready to prove it?
Pass the test and this pattern moves unknown
