public class KOuter: Outer() { public inner class X(bar: String? = (this@KOuter as Outer).A().bar): Outer.A() { var next: Outer.A? = (this@KOuter as Outer).A() val myBar: String? = (this@KOuter as Outer).A().bar init { (this@KOuter as Outer).A().bar = "" } fun foo(a: Outer.A) { val aa: Outer.A = a aa.bar = "" } fun getNext(): Outer.A? { return next } public override fun foo() { super.foo() } } } fun KOuter.X.bar(a: Outer.A = Outer().A()) { } fun Any.toA(): Outer.A? { return if (this is Outer.A) this as Outer.A else null }