abstract class Base(val x: T) { abstract fun foo(): T } class Derived(x: T) : Base(x) { override fun foo(): T = x }