// FILE: A.java public abstract class A { protected abstract String doIt(T... args); class B { public String test(T... args) { return doIt(args); } public String test2(S... args) { return doIt(args); } public String test3(U... args) { return doIt(args); } } } // FILE: 1.kt open class Super open class Sub: Super() class Sub2: Sub() val a: A = object : A() { override fun doIt(vararg parameters: Super): String = "OK" } fun box(): String { val b = a.B() if (b.test() != "OK") return "FAIL1" if (b.test2() != "OK") return "FAIL2" return b.test3() }