interface A { val result: Any } interface B : A { override val result: String } abstract class AImpl(override val result: Self) : A class BImpl(result: String) : AImpl(result), B fun box(): String = (BImpl("OK") as B).result