trait A { fun foo(value : T) : Unit = println(value) } class C : A { override fun foo(value: C) { super.foo(value) } }