Type Checks and Casts

Learn about type checks and casting in Kotlin.

While writing our code, we may often be inclined to check what type our object is using is, and cast it using as. As an example, let’s imagine we’re building a system for superheroes. Each superhero has their own set of methods:

interface Superhero
class Batman : Superhero {
fun callRobin() {
println("To the Bat-pole, Robin!")
}
}
class Superman : Superhero {
fun fly() {
println("Up, up and away!")
}
}
Defining classes Batman and Superman, both implement the Superhero interface

There’s also a function where a superhero tries to invoke their superpower:

fun doCoolStuff(s: Superhero) {
if (s is Superman) {
(s as Superman).fly()
}
else if (s is Batman) {
(a as Batman).callRobin()
}
}
Performing superhero specific action based on type

But ...