class A : Java1 {
  constructor() /* primary */ {
    super/*Java1*/()
    /* <init>() */

  }

}

class B : Java1 {
  constructor() /* primary */ {
    super/*Java1*/()
    /* <init>() */

  }

  override fun getA(): Int {
    return 100
  }

  override fun isB(): Boolean {
    return false
  }

  fun setB(t: Boolean) {
    <this>(super<B>).#b = t
  }

}

class C : Java3 {
  constructor() /* primary */ {
    super/*Java3*/()
    /* <init>() */

  }

}

class D : Java3 {
  constructor() /* primary */ {
    super/*Java3*/()
    /* <init>() */

  }

  override fun setA(t: Int) {
  }

  override fun setB(t: Boolean) {
  }

}

fun test(a: A, b: B, c: C, d: D) {
  a.getA() /*~> Unit */
  a.setA(t = 2)
  a.isB() /*~> Unit */
  b.getA() /*~> Unit */
  b.setA(t = 2)
  b.isB() /*~> Unit */
  b.setB(t = true)
  c.getA() /*~> Unit */
  c.setA(t = 2)
  c.isB() /*~> Unit */
  c.setB(t = true)
  d.getA() /*~> Unit */
  d.setA(t = 2)
  d.isB() /*~> Unit */
  d.setB(t = true)
}
