class A { public void foo(int b) { } } class D extends B implements Z { public void foo(int b) { } } class U { void bar(A a) { a.foo(2) } void bar(B b) { b.foo(4) } void bar(C c) { c.foo(6) } void bar(D d) { d.foo(8) } void bar(Z z) { z.foo(10) } }