Unlike java, you can extend the functionality of a class without creating a subclass to it. This is done by extensions. By using extensions, you can extend both the properties and methods.

**How to add extension function to a type?**

Prefix the function name with receiver type.

**Syntax**

Type.functionName(arguments) : returnType = definition

Let me explain with detailed example.

class Arithmetic {

fun sum(a: Int, b: Int) = a + b

fun sub(a: Int, b: Int) = a - b

}

I can add new function that multiply two numbers to the Arithmetic class using extensions like below.

fun Arithmetic.mul(a: Int, b: Int) = a * b

Find below working application.

**HelloWorld.kt**

class Arithmetic {

fun sum(a: Int, b: Int) = a + b

fun sub(a: Int, b: Int) = a - b

}

fun main(args: Array) {

fun Arithmetic.mul(a: Int, b: Int) = a * b

var obj = Arithmetic()

var sumOf10And20 = obj.sum(10, 20)

var subOf10And20 = obj.sub(10, 20)

var mulOf10And20 = obj.mul(10, 20)

println("Sum of 10 and 20 $sumOf10And20")

println("Subtraction of 10 and 20 $subOf10And20")

println("Multiplication of 10 and 20 $mulOf10And20")

}

**Output**

Sum of 10 and 20 30

Subtraction of 10 and 20 -10

Multiplication of 10 and 20 200

**How to add extension property?**

It is like adding extension function to a type. Remember Extension property cannot be initialized because it has no backing field, their behavior is defined only by using getter and setter methods.

**Ex**

val Arithmetic.PI: Double

get() = 3.14

Find the below working application.

**HelloWorld.kt**

class Arithmetic {

fun sum(a: Int, b: Int) = a + b

fun sub(a: Int, b: Int) = a - b

}

class Test {

val Arithmetic.PI: Double

get() = 3.14

fun getPI(): Double {

var obj = Arithmetic()

return obj.PI

}

}

fun main(args: Array) {

var obj = Test()

println("Value of PI : ${obj.getPI()}")

}

**Output**

Value of PI : 3.14

Previous Next Home

*This post first appeared on Java Tutorial : Blog To Learn Java Programming, please read the originial post: here*