Call the same interface method on different classes.

Polymorphism

Polymorphism.kt
interface Speaker {
    fun speak(): String
}

class SoftSpeaker : Speaker {
    override fun speak(): String {
        return "soft"
    }
}

class LoudSpeaker : Speaker {
    override fun speak(): String {
        return "loud"
    }
}

fun main() {
    val loud = 
    val speaker: Speaker = if (loud) LoudSpeaker() else SoftSpeaker()
    val sound = speaker.speak()

    println("loud=$loud")
    println("sound=$sound")
}
interface Speaker {
    fun speak(): String
}

class SoftSpeaker : Speaker {
    override fun speak(): String {
        return "soft"
    }
}

class LoudSpeaker : Speaker {
    override fun speak(): String {
        return "loud"
    }
}

fun main() {
    val loud = 
    val speaker: Speaker = if (loud) LoudSpeaker() else SoftSpeaker()
    val sound = speaker.speak()

    println("loud=$loud")
    println("sound=$sound")
}
polymorphism Polymorphism lets code use a shared type while the object decides the method result.