// FIR_IDENTICAL // TARGET_BACKEND: JVM // WITH_STDLIB // FILE: Java1.java public class Java1 implements KotlinInterface { @Override public void foo(T a) { } @Override public T bar() { return null; } } // FILE: Java2.java public interface Java2 extends KotlinInterface { } // FILE: 1.kt abstract class A : Java2 // Kotlin ← Java ← Kotlin class B : A() { override fun bar(): T { return null!! } override fun foo(a: T) { } } class C : Java1() //Kotlin ← Java(override) ← Kotlin class D : Java1() { override fun bar(): T { return null!! } override fun foo(a: T) { } } interface KotlinInterface { fun foo(a: T) fun bar(): T } fun test(a: A, b: B, c: C, d: D) { val k: Int = a.bar() val k3: Any = a.bar() a.foo(1) a.foo(null) a.foo(null) a.foo(listOf(null)) val k5: Int? = b.bar() val k6: Any = b.bar() b.foo(1) b.foo(null) b.foo(null) b.foo(listOf(null)) val k7: Int? = c.bar() val k8: Any = c.bar() c.foo(1) c.foo(null) c.foo(null) c.foo(listOf(null)) val k9: Int? = d.bar() val k10: Any = d.bar() d.foo(1) d.foo(null) d.foo(null) d.foo(listOf(null)) }