open class A { open val a = "OK" } class B : A() { override val a = "FAIL" fun foo() = "CRUSH" } class C { fun A?.complex(): String { if (this is B) return foo() else if (this != null) return a else return "???" } fun bar() = A().complex() } fun box() = C().bar()