Scott Whitman
08/06/2021, 12:46 PMabstract class Length {
abstract val meters: Double
override fun equals(other: Any?): Boolean {
if (this === other) return true
if (other !is Length) return false
return meters.equals(other.meters)
}
override fun hashCode() = meters.hashCode()
class Meter(value: Double) : Length() {
override val meters: Double = value
}
class Kilometer(value: Double) : Length() {
override val meters: Double = value * 1000.0
}
}
fun main() {
val oneKm = Length.Kilometer(1.0)
val oneThousandMeters = Length.Meter(1000.0)
println(oneKm.equals(oneThousandMeters))
// true
println(oneKm as Length == oneThousandMeters as Length)
// true
println(oneKm == oneThousandMeters)
// this will not compile: Operator '==' cannot be applied to 'Length.Kilometer' and 'Length.Meter'
}
kqr
08/06/2021, 1:32 PMhho
08/06/2021, 1:35 PMScott Whitman
08/06/2021, 1:57 PM