class Generic1 { public void foo(T p) { } } class Generic2 extends Generic1 { public void foo2(Y p) {} } public class Test2 extends Generic2{ public void foo2(Y p) { } public void foo(Y p) { } public static void main(String []argv) { Test2 t = new Test2(); t.foo(7); t.foo2(9); } }