class A { public void foo(int n, String s) { } public void bar(boolean b, int n, String s) { foo(n, s); } public void baz() { foo(1, "abc"); bar(false, 1, "abc"); } } class B extends A { public void foo(int n, String s) { } public void bar(boolean b, int n, String s) { foo(n, s); } public void baz() { foo(1, "abc"); bar(false, 1, "abc"); } } class Test { void test() { new A().foo(1, "abc"); new A().bar(true, 1, "abc"); new A().baz(); new B().foo(1, "abc"); new B().bar(true, 1, "abc"); new B().baz(); new C().foo(1, "abc"); new C().bar(true, 1, "abc"); new C().baz(); } }