open class Base() { open val method : (A?) -> A = { it!! } open fun foo(value : B) : B = value open fun bar(value : () -> C) : (String) -> C = { value() } } class C : Base() { override fun bar(value : () -> Unit) : (String) -> Unit { return super.bar(value) } override fun foo(value : C) : C { return super.foo(value) } override val method : (String?) -> String = ? }