Inheritance and Interfaces
Polymorphism
Call the same interface method on different classes.
polymorphism
Polymorphism lets code use a shared type while the object decides the method result.
Polymorphism
Polymorphism.kt
Replay: real traced execution (multi-file project)
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 = true
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 = false
val speaker: Speaker = if (loud) LoudSpeaker() else SoftSpeaker()
val sound = speaker.speak()
println("loud=$loud")
println("sound=$sound")
}
loud ← true
17fun main() {18 val loud→ true = true //@loud=false, true19 val speaker: Speaker = if (loudtrue) LoudSpeaker() else SoftSpeaker()20 val sound = speaker.speak()sound ← loud
19 val speaker: Speaker = if (loud) LoudSpeaker() else SoftSpeaker()20 val sound→ loud = speaker.speak()2122 println("loud=$loudtrue")23 println("sound=$soundloud")24}outputloud=true sound=loud
loud ← false
17fun main() {18 val loud→ false = false19 val speaker: Speaker = if (loudfalse) LoudSpeaker() else SoftSpeaker()20 val sound = speaker.speak()sound ← soft
19 val speaker: Speaker = if (loud) LoudSpeaker() else SoftSpeaker()20 val sound→ soft = speaker.speak()2122 println("loud=$loudfalse")23 println("sound=$soundsoft")24}outputloud=false sound=soft