class MethodExists { void foo() throws Exception { Class ca = A.class; Class cb = B.class; ca.getMethod("a1", int.class); ca.getMethod("a2", int.class); ca.getMethod("a3", int.class); ca.getMethod("a4", int.class); ca.getMethod("b1", int.class); ca.getMethod("b2", int.class); ca.getMethod("b3", int.class); ca.getMethod("b4", int.class); cb.getMethod("a1", int.class); cb.getMethod("a2", int.class); cb.getMethod("a3", int.class); cb.getMethod("a4", int.class); cb.getMethod("b1", int.class); cb.getMethod("b2", int.class); cb.getMethod("b3", int.class); cb.getMethod("b4", int.class); ca.getDeclaredMethod("a1", int.class); ca.getDeclaredMethod("a2", int.class); ca.getDeclaredMethod("a3", int.class); ca.getDeclaredMethod("a4", int.class); ca.getDeclaredMethod("b1", int.class); ca.getDeclaredMethod("b2", int.class); ca.getDeclaredMethod("b3", int.class); ca.getDeclaredMethod("b4", int.class); cb.getDeclaredMethod("a1", int.class); cb.getDeclaredMethod("a2", int.class); cb.getDeclaredMethod("a3", int.class); cb.getDeclaredMethod("a4", int.class); cb.getDeclaredMethod("b1", int.class); cb.getDeclaredMethod("b2", int.class); cb.getDeclaredMethod("b3", int.class); cb.getDeclaredMethod("b4", int.class); ca.getMethod("a5", String.class); ca.getMethod("a5", String[].class); ca.getMethod("a5", String.class, String.class); ca.getMethod("a5", int.class); ca.getDeclaredMethod("a5", String.class); ca.getDeclaredMethod("a5", String[].class); ca.getDeclaredMethod("a5", String.class, String.class); ca.getDeclaredMethod("a5", int.class); cb.getMethod("a5", String.class); cb.getMethod("a5", String[].class); cb.getMethod("a5", String.class, String.class); cb.getMethod("a5", int.class); cb.getDeclaredMethod("a5", String.class); cb.getDeclaredMethod("a5", String[].class); cb.getDeclaredMethod("a5", String.class, String.class); cb.getDeclaredMethod("a5", int.class); C.class.getMethod("c", int.class); C.class.getMethod("c", boolean.class); C.class.getMethod("d", int.class); } static class A { public int a1(int n) {return n;} protected int a2(int n) {return n;} int a3(int n) {return n;} private int a4(int n) {return n;} public String a5(String s) {return s;} public String a5(String s, String t) {return s;} protected String a5(String[] s) {return s[0];} } static class B extends A { public int b1(int n) {return n;} protected int b2(int n) {return n;} int b3(int n) {return n;} private int b4(int n) {return n;} public String b5(String s) {return s;} public String b5(String s, String t) {return s;} protected String b5(String[] s) {return s[0];} } static final class C extends A { public int c(int n) {return n;} } }