| abstract class Base { | |
| fun foo(): String { | |
| return when (this) { | |
| is Derived -> baz() | |
| else -> "fail 1" | |
| } | |
| } | |
| abstract fun bar(): String | |
| private fun Derived.baz(): String = bar() + k | |
| } | |
| class Derived : Base() { | |
| override fun bar(): String = "O" | |
| val k: String get() = "K" | |
| } | |
| fun box(): String { | |
| return Derived().foo() | |
| } |