trait A { val property : T open fun a() : T { return property } } open class B : A { override val property: Any = "fail" } open class C : B(), A { override val property: Any = "OK" } fun box() : String { return C().a() as String }