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 equals(other: Any?): Boolean { return super.equals(other) } override fun foo(value: C): C { return super.foo(value) } override fun hashCode(): Int { return super.hashCode() } override val method: (String?) -> String get() = super.method override fun toString(): String { return super.toString() } }