Object-Oriented Programming (OOP) in Kotlin
Estimated reading: 3 minutes 357 views

Kotlin – Abstract Classes (2025 Guide)

Learn how abstract classes work in Kotlin, when to use them, and how they differ from interfaces—with syntax, examples, and FAQs.


What is an Abstract Class in Kotlin?

An abstract class in Kotlin is a class that cannot be instantiated directly. It acts as a base class that defines common behavior for subclasses and can include both abstract methods (without body) and concrete methods (with body).

Use abstract classes when:

  • You want to provide a partial implementation.
  • You want to enforce a common base for related classes.

Key Features

  • Can contain abstract and non-abstract members.
  • Cannot be instantiated.
  • Subclasses must override abstract members.

Kotlin Abstract Class Syntax

abstract class Animal {
    abstract fun makeSound()

    fun breathe() {
        println("Breathing...")
    }
}

In the above code:

  • makeSound() is an abstract function – must be overridden.
  • breathe() is a concrete method – optional to override.

🐾 Example – Abstract Class Implementation

abstract class Animal {
    abstract fun makeSound()

    fun eat() {
        println("Eating...")
    }
}

class Dog : Animal() {
    override fun makeSound() {
        println("Woof!")
    }
}

fun main() {
    val dog = Dog()
    dog.makeSound()  // Output: Woof!
    dog.eat()        // Output: Eating...
}

Dog class implements the abstract function and inherits the concrete function.


Abstract Class vs Interface in Kotlin

FeatureAbstract ClassInterface
Can contain state (fields) Yes From Kotlin 1.1+ only
Multiple inheritance No Yes
Constructor Can have Cannot have
Default implementation Yes Yes

Use abstract class when:

  • You need to share code/state among subclasses.
  • You want to create a base class with constructor or properties.

Abstract Properties

abstract class Shape {
    abstract val name: String
}

class Circle : Shape() {
    override val name = "Circle"
}

Abstract properties must be overridden by the subclass.


Restrictions

  • Cannot be instantiated directly: val animal = Animal() // Error
  • All abstract members must be implemented by concrete subclasses.

Summary

ConceptDescription
abstract classBase class with or without method bodies
abstract functionMust be overridden in subclasses
abstract propertyMust be initialized in subclasses
open functionOptional to override

FAQ – Kotlin Abstract Classes

Q1: Can I create an object of an abstract class?

A: No. Abstract classes cannot be instantiated directly.


Q2: Can abstract classes have constructors?

A: Yes. You can define constructors just like in regular classes.

abstract class Base(val id: Int)

Q3: Can a Kotlin class extend both an abstract class and implement interfaces?

A: Yes. Kotlin supports single inheritance (one abstract class) and multiple interfaces.

class MyClass : AbstractClass(), MyInterface

Q4: Is an abstract class implicitly open?

A: Yes. You don’t need to use the open modifier with abstract classes.


Q5: Can I have a non-abstract class with only abstract methods?

A: No. If a class has even one abstract method or property, it must be declared abstract.


Share Now :
Share

Kotlin – Abstract Classes

Or Copy Link

CONTENTS
Scroll to Top