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.