import kotlin.reflect.KMemberProperty
trait Base {
val x: Any
}
class A : Base {
override val x: String = ""
}
open class B : Base {
override val x: Number = 1.0
}
class C : B() {
override val x: Int = 42
}
fun test() {
val base = Base::x
base : KMemberProperty
base.get(A()) : Any
base.get(B()) : Number
base.get(C()) : Int
val a = A::x
a : KMemberProperty
a.get(A()) : String
a.get(B()) : Number
val b = B::x
b : KMemberProperty
b.get(C()) : Int
}