Understanding Kotlin Inheritance and Extensions

Kotlin, a modern programming language, offers two powerful concepts: inheritance and extensions. While both allow developers to build upon existing classes, they serve distinct purposes and have different use cases.

What is Kotlin Inheritance?

Inheritance, a fundamental concept in object-oriented programming (OOP), enables a class to inherit properties and behavior from another class. In Kotlin, inheritance is implemented using the open keyword, which allows a class to be inherited from. The inheriting class, also known as the child class or subclass, can access all protected fields and functions of the parent class.


open class Animal {
    fun sound() {
        println("The animal makes a sound")
    }
}

class Dog : Animal() {
    override fun sound() {
        println("The dog barks")
    }
}

What are Kotlin Extensions?

Extensions, a feature introduced in Kotlin, enable developers to add functionality to existing classes without inheriting from them. Extensions are resolved statically and can be called like regular methods. They provide a way to extend the functionality of classes without modifying their source code.


fun String.greet() {
    println("Hello, $this!")
}

val name = "John"
name.greet() // prints "Hello, John!"

Key Differences between Inheritance and Extensions

Inheritance Extensions
Class modification Can only inherit from non-final classes Can extend any class, including final ones
Field access Can access protected fields of the parent class Can only access public fields of the extended class
Variable addition Can add new variables to the parent class Cannot add new variables to the extended class

When to Use Each

Use inheritance when:

  • Creating a hierarchy of related classes.
  • Needing to override the behavior of a parent class.

Use extensions when:

  • Adding functionality to an existing class without modifying its source code.
  • Creating utility functions that can be used across multiple classes.

Leave a Reply