class U interface T { fun foofoofoo(a: List, b: A?, c: U): U? } abstract class T1 : T, U> { override fun foofoofoo(a: List, b: U?, c: U>): U? { throw UnsupportedOperationException() } } abstract class T2 : T1() { override fun foofoofoo(a: List, b: U?, c: U>): U? { throw UnsupportedOperationException() } } class T3 : T2() { override fun foofoofoo(a: List, b: U?, c: U>): U? { throw UnsupportedOperationException() } }