// FILE: JA.java public interface JA { public E getFoo(); } // FILE: main.kt interface KB { override fun getFoo(): F override fun getBar(): F } interface D1 : JA, KB interface E1 : D1 { override fun getFoo(): String override fun getBar(): String } interface D2 : KB, JA interface E2 : D2 { override fun getFoo(): String override fun getBar(): String } fun main( d1: D1, e1: E1, d2: D2, e2: E2, ) { d1.foo d1.bar e1.foo e1.bar d2.foo d2.bar e2.foo e2.bar }