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