| var result = "" | |
| interface D1 { | |
| fun foo(): D1 { | |
| result += "D1" | |
| return this | |
| } | |
| } | |
| interface F2 : D1 | |
| interface D3 : F2 { | |
| override fun foo(): D3 { | |
| result += "D3" | |
| return this | |
| } | |
| } | |
| class D4 : D3 | |
| fun box(): String { | |
| val x = D4() | |
| x.foo() | |
| val d3: D3 = x | |
| val f2: F2 = x | |
| val d1: D1 = x | |
| d3.foo() | |
| f2.foo() | |
| d1.foo() | |
| return if (result == "D3D3D3D3") "OK" else "Fail: $result" | |
| } |