public class MyClass { public void add(MyClass arg1) {} } ClassLoader cl1 = new MyClassLoader(); ClassLoader cl2 = new MyClassLoader(); Class class1 = cl1.loadClass("MyClass"); Class class2 = cl2.loadClass("MyClass"); Object obj1 = class1.newInstance(); Object obj2 = class2.newInstance(); Method m1 = class1.getMethod("add", new Class[] {class1}); m1.invoke(obj1, new Object[] {obj1}); // works m1.invoke(obj1, new Object[] {obj2}); // throws ClassCastException