class A { } class B { A foo() { return null; } void bar(B b, A foo1) { baz(b.foo()); A foo = b.foo(); baz(foo); baz(foo1); } void baz(A a) { } } class C{} class D extends C { void foo(D x){ bar(x); } void bar(C x){} }