In Java we have extends keyword which mean that some type we pass must extend some other. In Kotlin we do it like this (Extends.kt):
abstract class Airplane {
abstract fun decribeMe();
}
class Boeing : Airplane() {
override fun decribeMe() {
println("Being")
}
}
class Airbus : Airplane() {
override fun decribeMe() {
println("Airbus")
}
}
class AirplaneDescriptor {
fun <T : Airplane> describe(airplane: T) {
airplane.decribeMe()
}
}
fun tryExtendsExample(){
val airplane1 = Airbus()
val airplane2 = Boeing()
val descriptor = AirplaneDescriptor()
descriptor.describe(airplane1)
descriptor.describe(airplane2)
}
Running tryExtendsExample() method gives console output:
Airbus
Boeing